Kuidas teha asünkroonseid toiminguid puhtas Androidis?
sobes.tech AI
Vastus AI-lt
On olemas mitu viisi:
-
Niidid (Threads): Oma niitide loomine ja haldamine.
new Thread(new Runnable() { @Override public void run() { // Pikaajalise operatsiooni täitmine // ... // UI uuendamine (nõuab Handlerit) // handler.post(...) } }).start(); -
Handler ja Looper: Kasutatakse sõnumite vahetamiseks niitide vahel, sageli UI uuendamiseks taustaniidist.
Handler handler = new Handler(Looper.getMainLooper()); // ... taustaniidil handler.post(new Runnable() { @Override public void run() { // UI uuendamine } }); -
AsyncTask (vananenud, kuid kasulik teadmiseks): Lihtne viis teha asünkroonseid ülesandeid ja uuendada UI. Ei soovitata uue koodi jaoks.
private class MyAsyncTask extends AsyncTask<Void, Void, String> { @Override protected String doInBackground(Void... voids) { // Pikaajalise operatsiooni täitmine return "Tulemus"; } @Override protected void onPostExecute(String result) { // UI uuendamine tulemusega } } // ... // new MyAsyncTask().execute(); -
ExecutorService ja Future: Paindlikum mehhanism niitide basseinide haldamiseks.
ExecutorService executor = Executors.newSingleThreadExecutor(); Future<String> future = executor.submit(new Callable<String>() { @Override public String call() throws Exception { // Pikaajalise operatsiooni täitmine return "Tulemus"; } }); // Tulemuse saamine (blokeeriv) // String result = future.get(); -
Kotlin Korutinaid: Kaasaegne lähenemisviis asünkroonseks programmeerimiseks Kotlinis, mis põhineb kooperatsioonidel. Vajab sõltuvuste lisamist.
import kotlinx.coroutines.* // ... korutina siseruumis (nt, viewModelScope) GlobalScope.launch(Dispatchers.IO) { // Täitmine taustal IO-voos // Pikaajalise operatsiooni täitmine withContext(Dispatchers.Main) { // Vahetus peamisele voole UI uuendamiseks // UI uuendamine } }
Valik sõltub ülesande keerukusest, nõutavast kontrollitasemest ja keelest (Java/Kotlin). Tänapäeva Androidi arenduses soovitatakse kasutada Kotlin Korutinasid või raamatukogusid nagu RxJava või Flow asünkroonseks tööks.