Sobes.tech
Middle

Kā palaist asīnhronas operācijas tīrā Android?

sobes.tech AI

Atbilde no AI

Ir vairākus veidus:

  • Thread: Izveidot jaunu pavedienu uzdevuma izpildei. Vienkārši, bet dzīves cikla pārvaldība un datu nodošana atpakaļ galvenajā pavedienā prasa papildu loģiku (Handler, runOnUiThread).

    new Thread(new Runnable() {
        @Override
        public void run() {
            // Asinhrona operācija
            // UI atjaunināšana caur runOnUiThread vai Handler
        }
    }).start();
    
  • AsyncTask: Senāks, bet vienkāršs klases veids, lai veiktu fonu operācijas un atjauninātu UI. Nodrošina metodes onPreExecute, doInBackground, onProgressUpdate, onPostExecute.

    private static class MyAsyncTask extends AsyncTask<Void, Void, String> {
        @Override
        protected String doInBackground(Void... voids) {
            // Asinhrona operācija
            return "Rezultāts";
        }
    
        @Override
        protected void onPostExecute(String result) {
            // UI atjaunināšana galvenajā pavedienā
        }
    }
    
    // Sākt: new MyAsyncTask().execute();
    
  • Handler un Looper: Elastīgāks mehānisms ziņojumu un uzdevumu sūtīšanai un apstrādei starp pavedieniem. Handler ir saistīts ar Looper pavedienu, kurā tas ir izveidots.

    Handler handler = new Handler(Looper.getMainLooper()); // Galvenajam pavedienam
    
    handler.post(new Runnable() {
        @Override
        public void run() {
            // Uzdevuma izpilde galvenajā pavedienā pēc asinhronas operācijas
        }
    });
    
  • ExecutorService un Callable/Runnable: Standarta Java mehānismi pavedienu baseinu pārvaldībai. Ļauj efektīvāk izmantot resursus un pārvaldīt daudzu uzdevumu izpildi.

    ExecutorService executor = Executors.newSingleThreadExecutor(); // Vai cits tips
    
    executor.submit(new Runnable() {
        @Override
        public void run() {
            // Asinhrona operācija
        }
    });
    
    // Vai submit(Callable) rezultāta iegūšanai
    
  • Coroutine (ar Kotlin): Modernāks un ērtāks veids, kā pārvaldīt asinhronas operācijas Kotlin. Atļauj rakstīt asinhrono kodu imperatīvā stilā. Nepieciešams pievienot atbilstošas atkarības.

    import kotlinx.coroutines.*
    
    GlobalScope.launch(Dispatchers.IO) {
        // Asinhrona operācija fonā
        withContext(Dispatchers.Main) {
            // UI atjaunināšana galvenajā pavedienā
        }
    }