Sobes.tech
Middle

Чӣ гуна амалиётҳои асинхронро дар Android тоза иҷро кардан мумкин аст?

sobes.tech AI

Ҷавоб аз AI

Ҳудуди чанд роҳ вуҷуд дорад:

  1. Потҳо (Threads): Эҷод ва идоракунии потҳои худ.

    new Thread(new Runnable() {
        @Override
        public void run() {
            // Иҷрои амали дароз
            // ...
            // Навсозии UI (талап мекунад Handler)
            // handler.post(...)
        }
    }).start();
    
  2. Handler ва Looper: Барои мубодилаи паёмҳо байни потҳо истифода мешаванд, аксар вақт барои навсозии UI аз поти пасзамина.

    Handler handler = new Handler(Looper.getMainLooper());
    // ... дар поти пасзамина
    handler.post(new Runnable() {
        @Override
        public void run() {
            // Навсозии UI
        }
    });
    
  3. AsyncTask (қатъ шудааст, аммо фоиданок аст): Роҳи содда барои иҷрои вазифаҳои асинхронӣ бо навсозии UI. Тавсия намешавад барои коди нав.

    private class MyAsyncTask extends AsyncTask<Void, Void, String> {
        @Override
        protected String doInBackground(Void... voids) {
            // Иҷрои амали дароз
            return "Натиҷа";
        }
    
        @Override
        protected void onPostExecute(String result) {
            // Навсозии UI бо натиҷа
        }
    }
    // ...
    // new MyAsyncTask().execute();
    
  4. ExecutorService ва Future: Механизми бештар флексибил барои идоракунии пулҳои пот.

    ExecutorService executor = Executors.newSingleThreadExecutor();
    Future<String> future = executor.submit(new Callable<String>() {
        @Override
        public String call() throws Exception {
            // Иҷрои амали дароз
            return "Натиҷа";
        }
    });
    // Гирифтани натиҷа (блоккунанда)
    // String result = future.get();
    
  5. Kotlin Coroutines: Равиши муосир барои барномасозии асинхронӣ дар Kotlin, асос ёфта дар сопрограмаҳо. Ниёз ба илова кардани вобастагиҳо.

    import kotlinx.coroutines.*
    
    // ... дар скоупи корутин (масалан, viewModelScope)
    GlobalScope.launch(Dispatchers.IO) { // Иҷро дар поти пасзаминаи IO
        // Иҷрои амали дароз
        withContext(Dispatchers.Main) { // гузариш ба поти асосӣ барои навсозии UI
            // Навсозии UI
        }
    }
    

Интихоби усул вобаста ба мураккабии вазифа, сатҳи назорат дар потҳо ва афзалиятҳои забон (Java/Kotlin). Дар таҳаввулоти ҳозираи Android тавсия дода мешавад, ки Kotlin Coroutines ё китобхонаҳои асинхронӣ, ба монанди RxJava ё Flow, истифода шаванд.