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։