Sobes.tech
Middle

Jak spustit asynchronní operace v čistém Androidu?

sobes.tech AI

Odpověď od AI

Lze použít několik způsobů:

  • Thread: Vytvoření nového vlákna pro provedení úkolu. Jednoduché, ale řízení životního cyklu a předávání dat zpět do hlavního vlákna vyžaduje další logiku (Handler, runOnUiThread).

    new Thread(new Runnable() {
        @Override
        public void run() {
            // Provádění asynchronní operace
            // Aktualizace UI přes runOnUiThread nebo Handler
        }
    }).start();
    
  • AsyncTask: Zastaralé, ale jednoduchá třída pro provádění operací na pozadí a aktualizaci UI. Poskytuje metody onPreExecute, doInBackground, onProgressUpdate, onPostExecute.

    private static class MyAsyncTask extends AsyncTask<Void, Void, String> {
        @Override
        protected String doInBackground(Void... voids) {
            // Provádění asynchronní operace
            return "Výsledek";
        }
    
        @Override
        protected void onPostExecute(String result) {
            // Aktualizace UI v hlavním vlákně
        }
    }
    
    // Spuštění: new MyAsyncTask().execute();
    
  • Handler a Looper: Flexibilnější mechanismus pro odesílání a zpracování zpráv a úkolů mezi vlákny. Handler je spojen s Looper vlákna, ve kterém byl vytvořen.

    Handler handler = new Handler(Looper.getMainLooper()); // Pro hlavní vlákno
    
    handler.post(new Runnable() {
        @Override
        public void run() {
            // Provádění úkolu v hlavním vlákně po asynchronní operaci
        }
    });
    
  • ExecutorService a Callable/Runnable: Standardní mechanismy Java pro správu vláknové pooly. Umožňují efektivnější využití zdrojů a řízení provádění více úkolů.

    ExecutorService executor = Executors.newSingleThreadExecutor(); // Nebo jiný typ exekutora
    
    executor.submit(new Runnable() {
        @Override
        public void run() {
            // Provádění asynchronní operace
        }
    });
    
    // Nebo submit(Callable) pro získání výsledku
    
  • Coroutine (s Kotlinem): Modernější a pohodlnější způsob řízení asynchronních operací v Kotlinu. Umožňuje psát asynchronní kód v imperativním stylu. Vyžaduje přidání odpovídajících závislostí.

    import kotlinx.coroutines.*
    
    GlobalScope.launch(Dispatchers.IO) {
        // Provádění asynchronní operace na pozadí
        withContext(Dispatchers.Main) {
            // Aktualizace UI v hlavním vlákně
        }
    }