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 metodusonPreExecute,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(); -
HandlerirLooper: Lankstesnis mechanizmas žinučių ir užduočių siuntimui ir apdorojimui tarp srautų.Handlersusijęs suLoopersrautu, 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 } }); -
ExecutorServiceirCallable/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 } }