Sobes.tech
Middle

Kako pokrenuti asinhrone operacije u čistom Androidu?

sobes.tech АИ

Одговор од АИ

Може да се користи неколико начина:

  • Thread: Креирање новог тока за извршавање задатка. Једноставно, али управљање животним циклусом и пренос података назад у главни ток захтева додатну логику (Handler, runOnUiThread).

    new Thread(new Runnable() {
        @Override
        public void run() {
            // Извршавање асинхроне операције
            // Ажурирање UI преко runOnUiThread или Handler
        }
    }).start();
    
  • AsyncTask: Истрошен, али једноставан клас за извршавање позадинских операција и ажурирање UI. Пружа методе onPreExecute, doInBackground, onProgressUpdate, onPostExecute.

    private static class MyAsyncTask extends AsyncTask<Void, Void, String> {
        @Override
        protected String doInBackground(Void... voids) {
            // Извршавање асинхроне операције
            return "Резултат";
        }
    
        @Override
        protected void onPostExecute(String result) {
            // Ажурирање UI у главном току
        }
    }
    
    // Покретање: new MyAsyncTask().execute();
    
  • Handler и Looper: Више флексибилан механизам за слање и обраду порука и задатака између тока. Handler је повезан са Looper тока у коме је креиран.

    Handler handler = new Handler(Looper.getMainLooper()); // За главни ток
    
    handler.post(new Runnable() {
        @Override
        public void run() {
            // Извршавање задатка у главном току након асинхроне операције
        }
    });
    
  • ExecutorService и Callable/Runnable: Стандардни механизми у Јави за управљање пулом тока. Омогућавају ефикасније коришћење ресурса и управљање извршењем више задатака.

    ExecutorService executor = Executors.newSingleThreadExecutor(); // Или други тип екзекьютора
    
    executor.submit(new Runnable() {
        @Override
        public void run() {
            // Извршавање асинхроне операције
        }
    });
    
    // Или submit(Callable) за добијање резултата
    
  • Coroutine (са Kotlin): Напреднији и погоднији начин управљања асинхроним операцијама у Kotlin-у. Омогућавају писање асинхроног кода у императивном стилу. Потребно је додавање одговарајућих зависности.

    import kotlinx.coroutines.*
    
    GlobalScope.launch(Dispatchers.IO) {
        // Извршавање асинхроне операције у позадинском току
        withContext(Dispatchers.Main) {
            // Ажурирање UI у главном току
        }
    }