Kaip atlikti asinchronines operacijas gryname Android?
sobes.tech AI
Atsakymas iš AI
Yra keli būdai:
-
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(); -
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 } }); -
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(); -
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(); -
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.