Sobes.tech
Middle

Toza Androidda asinxron operatsiyalarni qanday bajarish mumkin?

sobes.tech AI

AIdan javob

Bir nechta usullar mavjud:

  1. Threadlar (Iplar): O'z iplaringizni yaratish va boshqarish.

    new Thread(new Runnable() {
        @Override
        public void run() {
            // Uzun davom etadigan operatsiyani bajarish
            // ...
            // UI ni yangilash (Handler talab qilinadi)
            // handler.post(...)
        }
    }).start();
    
  2. Handler va Looper: Xabarlarni iplar o'rtasida almashish uchun ishlatiladi, ko'pincha fon iplardan UI ni yangilash uchun.

    Handler handler = new Handler(Looper.getMainLooper());
    // ... fon iplarda
    handler.post(new Runnable() {
        @Override
        public void run() {
            // UI ni yangilash
        }
    });
    
  3. AsyncTask (eskirgan, ammo bilish foydali): UI ni yangilash bilan asinxron vazifalarni bajarishning oddiy usuli. Yangi kod uchun tavsiya etilmaydi.

    private class MyAsyncTask extends AsyncTask<Void, Void, String> {
        @Override
        protected String doInBackground(Void... voids) {
            // Uzun davom etadigan operatsiyani bajarish
            return "Natija";
        }
    
        @Override
        protected void onPostExecute(String result) {
            // UI ni natija bilan yangilash
        }
    }
    // ...
    // new MyAsyncTask().execute();
    
  4. ExecutorService va Future: Ishlarni boshqarish uchun yanada moslashuvchan mexanizm.

    ExecutorService executor = Executors.newSingleThreadExecutor();
    Future<String> future = executor.submit(new Callable<String>() {
        @Override
        public String call() throws Exception {
            // Uzun davom etadigan operatsiyani bajarish
            return "Natija";
        }
    });
    // Natijani olish (bloklovchi)
    // String result = future.get();
    
  5. Kotlin Korutinalari: Kotlinda zamonaviy asinxron dasturlash yondashuvi, korutinalarga asoslangan. Qo'shimcha bog'lamalarni talab qiladi.

    import kotlinx.coroutines.*
    
    // ... korutina doirasida (masalan, viewModelScope)
    GlobalScope.launch(Dispatchers.IO) { // Orqa fon IO iplarda bajarish
        // Uzun davom etadigan operatsiyani bajarish
        withContext(Dispatchers.Main) { // UI ni yangilash uchun asosiy iplga o'tish
            // UI ni yangilash
        }
    }
    

Usul tanlovi vazifaning murakkabligiga, talab qilingan iplarga nazorat darajasiga va til (Java/Kotlin) afzalliklariga bog'liq. Zamonaviy Android dasturlashda Kotlin Korutinalaridan yoki RxJava yoki Flow kabi kutubxonalardan foydalanishni tavsiya etiladi.