Sobes.tech
Middle

Jak provádět asynchronní operace v čistém Androidu?

sobes.tech AI

Odpověď od AI

Existuje několik způsobů:

  1. Vlákna (Threads): Vytváření a správa vlastních vláken.

    new Thread(new Runnable() {
        @Override
        public void run() {
            // Provádění dlouhotrvající operace
            // ...
            // Aktualizace UI (vyžaduje Handler)
            // handler.post(...)
        }
    }).start();
    
  2. Handler a Looper: Používají se k výměně zpráv mezi vlákny, často k aktualizaci UI z pozadí.

    Handler handler = new Handler(Looper.getMainLooper());
    // ... v pozadí vlákna
    handler.post(new Runnable() {
        @Override
        public void run() {
            // Aktualizace UI
        }
    });
    
  3. AsyncTask (zastaralé, ale užitečné vědět): Jednoduchý způsob, jak provádět asynchronní úkoly s aktualizací UI. Nedoporučuje se pro nový kód.

    private class MyAsyncTask extends AsyncTask<Void, Void, String> {
        @Override
        protected String doInBackground(Void... voids) {
            // Provádění dlouhotrvající operace
            return "Výsledek";
        }
    
        @Override
        protected void onPostExecute(String result) {
            // Aktualizace UI s výsledkem
        }
    }
    // ...
    // new MyAsyncTask().execute();
    
  4. ExecutorService a Future: Flexibilnější mechanismus pro správu vláken.

    ExecutorService executor = Executors.newSingleThreadExecutor();
    Future<String> future = executor.submit(new Callable<String>() {
        @Override
        public String call() throws Exception {
            // Provádění dlouhotrvající operace
            return "Výsledek";
        }
    });
    // Získání výsledku (blokující)
    // String result = future.get();
    
  5. Kotlin Coroutines: Moderní přístup k asynchronnímu programování v Kotlinu, založený na korutinách. Vyžaduje přidání závislostí.

    import kotlinx.coroutines.*
    
    // ... v scope korutiny (například viewModelScope)
    GlobalScope.launch(Dispatchers.IO) { // Vykonání na pozadí v IO vlákně
        // Provádění dlouhotrvající operace
        withContext(Dispatchers.Main) { // Přepnutí na hlavní vlákno pro aktualizaci UI
            // Aktualizace UI
        }
    }
    

Volba metody závisí na složitosti úkolu, požadované úrovni kontroly nad vlákny a preferencích jazyka (Java/Kotlin). V moderním vývoji Android se doporučuje používat Kotlin Coroutines nebo knihovny jako RxJava nebo Flow.