Kā veikt asīnhronas operācijas tīrā Android?
sobes.tech AI
Atbilde no AI
Ir daudz veidu:
-
Vijas (Threads): Izveidot un pārvaldīt savas vijas.
new Thread(new Runnable() { @Override public void run() { // Ilgas operācijas izpilde // ... // UI atjaunināšana (prasība pēc Handler) // handler.post(...) } }).start(); -
Handler un Looper: Tiek izmantoti ziņojumu apmaiņai starp vijas, bieži UI atjaunināšanai no fonu vijas.
Handler handler = new Handler(Looper.getMainLooper()); // ... fonā handler.post(new Runnable() { @Override public void run() { // UI atjaunināšana } }); -
AsyncTask (novecojis, bet noderīgs zināšanai): Vienkāršs veids, kā veikt asinhronas uzdevumus ar UI atjaunināšanu. Nav ieteicams jaunam kodam.
private class MyAsyncTask extends AsyncTask<Void, Void, String> { @Override protected String doInBackground(Void... voids) { // Ilgas operācijas izpilde return "Rezultāts"; } @Override protected void onPostExecute(String result) { // UI atjaunināšana ar rezultātu } } // ... // new MyAsyncTask().execute(); -
ExecutorService un Future: Elastīgāks mehānisms viju baseinu pārvaldībai.
ExecutorService executor = Executors.newSingleThreadExecutor(); Future<String> future = executor.submit(new Callable<String>() { @Override public String call() throws Exception { // Ilgas operācijas izpilde return "Rezultāts"; } }); // Rezultāta iegūšana (bloķējoša) // String result = future.get(); -
Kotlin Korutinas: Mūsdienīgs pieejas veids asinhronai programmēšanai Kotlin, balstīts uz kooperācijām. Prasa pievienot atkarības.
import kotlinx.coroutines.* // ... korutinu sfera (piem., viewModelScope) GlobalScope.launch(Dispatchers.IO) { // Darbība fonā IO plūsmā // Ilgas operācijas izpilde withContext(Dispatchers.Main) { // Pārslēgties uz galveno plūsmu UI atjaunināšanai // UI atjaunināšana } }
Izvēle ir atkarīga no uzdevuma sarežģītības, nepieciešamā kontroles līmeņa un valodas (Java/Kotlin). Mūsdienu Android izstrādē ieteicams izmantot Kotlin Korutinas vai bibliotēkas asinhronai darbībai, piemēram, RxJava vai Flow.