Sobes.tech
Middle

Kaip atlikti asinchronines operacijas gryname Android?

sobes.tech AI

Atsakymas iš AI

Yra keli būdai:

  1. Gijos (Threads): Sukurti ir valdyti savo gijas.

    new Thread(new Runnable() {
        @Override
        public void run() {
            // Ilgalaikės operacijos vykdymas
            // ...
            // UI atnaujinimas (reikalauja Handler)
            // handler.post(...)
        }
    }).start();
    
  2. Handler ir Looper: Naudojami žinučių mainams tarp gijų, dažnai UI atnaujinimui iš foninės gijos.

    Handler handler = new Handler(Looper.getMainLooper());
    // ... foninėje gijoje
    handler.post(new Runnable() {
        @Override
        public void run() {
            // UI atnaujinimas
        }
    });
    
  3. AsyncTask (pasenusi, bet naudinga žinoti): Paprastas būdas vykdyti asinchronines užduotis ir atnaujinti UI. Nerekomenduojama naudoti naujame kode.

    private class MyAsyncTask extends AsyncTask<Void, Void, String> {
        @Override
        protected String doInBackground(Void... voids) {
            // Ilgalaikės operacijos vykdymas
            return "Rezultatas";
        }
    
        @Override
        protected void onPostExecute(String result) {
            // UI atnaujinimas su rezultatu
        }
    }
    // ...
    // new MyAsyncTask().execute();
    
  4. ExecutorService ir Future: Lankstesnis mechanizmas valdyti gijų pool'us.

    ExecutorService executor = Executors.newSingleThreadExecutor();
    Future<String> future = executor.submit(new Callable<String>() {
        @Override
        public String call() throws Exception {
            // Ilgalaikės operacijos vykdymas
            return "Rezultatas";
        }
    });
    // Rezultato gavimas (blokuojantis)
    // String result = future.get();
    
  5. Kotlin Korutinos: Šiuolaikinis būdas asinchroniniam programavimui Kotlin, pagrįstas kooperacijomis. Reikia pridėti priklausomybes.

    import kotlinx.coroutines.*
    
    // ... korutinų sferoje (pvz., viewModelScope)
    GlobalScope.launch(Dispatchers.IO) { // Vykdyti foniniame IO sraute
        // Ilgalaikės operacijos vykdymas
        withContext(Dispatchers.Main) { // Perjungti į pagrindinį srautą UI atnaujinimui
            // UI atnaujinimas
        }
    }
    

Pasirinkimas priklauso nuo užduoties sudėtingumo, reikalingo kontrolės lygio ir kalbos (Java/Kotlin) pasirinkimo. Šiuolaikinėje Android kūrimo praktikoje rekomenduojama naudoti Kotlin Korutinas arba bibliotekas asinchroniniam darbui, tokias kaip RxJava ar Flow.