Sobes.tech
Middle

Təmiz Android-də asinxron əməliyyatlar necə həyata keçirilir?

sobes.tech Süni İntellekt

AI-dan cavab

Bir neçə üsul mövcuddur:

  1. İş parçaları (Threads): Öz iş parçalarınızı yaratmaq və idarə etmək.

    new Thread(new Runnable() {
        @Override
        public void run() {
            // Uzun müddətli əməliyyatın yerinə yetirilməsi
            // ...
            // UI yeniləməsi (Handler tələb edir)
            // handler.post(...)
        }
    }).start();
    
  2. Handler və Looper: Mesajların iş parçaları arasında mübadiləsi üçün istifadə olunur, çox vaxt fon iş parçacığından UI-ni yeniləmək üçün.

    Handler handler = new Handler(Looper.getMainLooper());
    // ... fon iş parçacığında
    handler.post(new Runnable() {
        @Override
        public void run() {
            // UI-ni yeniləmək
        }
    });
    
  3. AsyncTask (köhnə, amma bilmək faydalıdır): UI yeniləməsi ilə asinxron tapşırıqları yerinə yetirməyin sadə yolu. Yeni kod üçün tövsiyə edilmir.

    private class MyAsyncTask extends AsyncTask<Void, Void, String> {
        @Override
        protected String doInBackground(Void... voids) {
            // Uzun müddətli əməliyyatın yerinə yetirilməsi
            return "Nəticə";
        }
    
        @Override
        protected void onPostExecute(String result) {
            // UI-ni nəticə ilə yeniləmək
        }
    }
    // ...
    // new MyAsyncTask().execute();
    
  4. ExecutorService və Future: İş parçaları hovuzlarını idarə etmək üçün daha çevik mexanizm.

    ExecutorService executor = Executors.newSingleThreadExecutor();
    Future<String> future = executor.submit(new Callable<String>() {
        @Override
        public String call() throws Exception {
            // Uzun müddətli əməliyyatın yerinə yetirilməsi
            return "Nəticə";
        }
    });
    // Nəticəni almaq (bloklama)
    // String result = future.get();
    
  5. Kotlin Korutinaları: Kotlin-də müasir asinxron proqramlaşdırma yanaşması, korutinalara əsaslanır. Əlavə asılılıqlar tələb edir.

    import kotlinx.coroutines.*
    
    // ... korutina scope daxilində (məsələn, viewModelScope)
    GlobalScope.launch(Dispatchers.IO) { // Arxa plan IO iş parçacığında yerinə yetirmə
        // Uzun müddətli əməliyyatın yerinə yetirilməsi
        withContext(Dispatchers.Main) { // UI-ni yeniləmək üçün əsas iş parçacığına keçid
            // UI-ni yeniləmək
        }
    }
    

Yöntem seçimi vəzifənin mürəkkəbliyinə, tələb olunan nəzarət səviyyəsinə və dil üstünlüklərinə (Java/Kotlin) bağlıdır. Müasir Android inkişafında Kotlin Korutinalarından və ya RxJava və ya Flow kimi kitabxanalardan istifadə etmək tövsiyə olunur.