Sobes.tech
Middle

Kaip paleisti asinchronines operacijas grynajame Android?

sobes.tech AI

Atsakymas iš AI

Yra keli būdai:

  • Thread: Sukurti naują srautą užduočiai vykdyti. Paprasta, bet gyvenimo ciklo valdymas ir duomenų perdavimas atgal į pagrindinį srautą reikalauja papildomos logikos (Handler, runOnUiThread).

    new Thread(new Runnable() {
        @Override
        public void run() {
            // Asinchroninė operacija
            // UI atnaujinimas per runOnUiThread arba Handler
        }
    }).start();
    
  • AsyncTask: Pasenęs, bet paprastas klasės būdas vykdyti fonines operacijas ir atnaujinti UI. Pateikia metodus onPreExecute, doInBackground, onProgressUpdate, onPostExecute.

    private static class MyAsyncTask extends AsyncTask<Void, Void, String> {
        @Override
        protected String doInBackground(Void... voids) {
            // Asinchroninė operacija
            return "Rezultatas";
        }
    
        @Override
        protected void onPostExecute(String result) {
            // UI atnaujinimas pagrindiniame sraute
        }
    }
    
    // Paleisti: new MyAsyncTask().execute();
    
  • Handler ir Looper: Lankstesnis mechanizmas žinučių ir užduočių siuntimui ir apdorojimui tarp srautų. Handler susijęs su Looper srautu, kuriame jis sukurtas.

    Handler handler = new Handler(Looper.getMainLooper()); // Pagrindiniam srautui
    
    handler.post(new Runnable() {
        @Override
        public void run() {
            // Užduoties vykdymas pagrindiniame sraute po asinchroninės operacijos
        }
    });
    
  • ExecutorService ir Callable/Runnable: Standartiniai Java mechanizmai valdyti srautų bazę. Leidžia efektyviau naudoti išteklius ir valdyti daugelio užduočių vykdymą.

    ExecutorService executor = Executors.newSingleThreadExecutor(); // Arba kitas tipas
    
    executor.submit(new Runnable() {
        @Override
        public void run() {
            // Asinchroninė operacija
        }
    });
    
    // Arba submit(Callable) rezultatui gauti
    
  • Coroutine (su Kotlin): Modernesnis ir patogesnis būdas valdyti asinchronines operacijas Kotlin. Leidžia rašyti asinchroninį kodą imperatyviu stiliumi. Reikalauja pridėti atitinkamas priklausomybes.

    import kotlinx.coroutines.*
    
    GlobalScope.launch(Dispatchers.IO) {
        // Asinchroninė operacija foniniame sraute
        withContext(Dispatchers.Main) {
            // UI atnaujinimas pagrindiniame sraute
        }
    }