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 сыяктуу китепканаларды колдонуу сунушталат.