Sobes.tech
Middle

Ինչպես սկսել ասինխրոն գործողությունները մաքուր Android-ում?

sobes.tech AI

Պատասխան AI-ից

Կա մի քանի եղանակներ՝

  • Thread: Ստեղծել նոր հոսք՝ առաջադրանքը կատարելու համար: Պարզ, բայց կյանքի ցիկլի կառավարման և տվյալների փոխանցման համար գլխավոր հոսքին պահանջվում է լրացուցիչ լոգիկա (Handler, runOnUiThread):

    new Thread(new Runnable() {
        @Override
        public void run() {
            // Ասինխրոն գործողության կատարմամբ
            // UI թարմացում `runOnUiThread` կամ `Handler`-ի միջոցով
        }
    }).start();
    
  • AsyncTask: Հին, բայց պարզ դաս՝ ֆոնային գործողություններ կատարելու և UI-ն թարմացնելու համար: Պարունակում է onPreExecute, doInBackground, onProgressUpdate, onPostExecute մեթոդներ:

    private static class MyAsyncTask extends AsyncTask<Void, Void, String> {
        @Override
        protected String doInBackground(Void... voids) {
            // Ասինխրոն գործողության կատարում
            return "Արդյունք";
        }
    
        @Override
        protected void onPostExecute(String result) {
            // UI թարմացում գլխավոր հոսքում
        }
    }
    
    // Սկսում: new MyAsyncTask().execute();
    
  • Handler և Looper: Ավելի ճկուն մեխանիզմ հաղորդագրությունների և առաջադրանքների ուղարկման և մշակման համար հոսքերի միջև: Handler-ը կապված է Looper-ի հետ, որի մեջ է ստեղծված:

    Handler handler = new Handler(Looper.getMainLooper()); // Գլխավոր հոսքի համար
    
    handler.post(new Runnable() {
        @Override
        public void run() {
            // Գլխավոր հոսքում առաջադրանքի կատարմամբ՝ ասինխրոն գործողությունից հետո
        }
    });
    
  • ExecutorService և Callable/Runnable: Ստանդարտ մեխանիզմներ Java- ում՝ հոսքերի պուլը կառավարելու համար: Արդյունավետ օգտագործում են ռեսուրսները և կառավարում բազմաթիվ առաջադրանքների կատարմամբ:

    ExecutorService executor = Executors.newSingleThreadExecutor(); // կամ այլ տեսակ
    
    executor.submit(new Runnable() {
        @Override
        public void run() {
            // Ասինխրոն գործողության կատարում
        }
    });
    
    // կամ submit(Callable)՝ արդյունք ստանալու համար
    
  • Coroutine (Kotlin-ով): Ավելի ժամանակակից և հարմար միջոց՝ ասինխրոն գործողությունները կառավարելու համար Kotlin- ում: Позволяют писать асинхронный код в императивном стиле. Պահանջվում է համապատասխան կախվածությունների ավելացում:

    import kotlinx.coroutines.*
    
    GlobalScope.launch(Dispatchers.IO) {
        // Ասինխրոն գործողության կատարում ֆոնային հոսքում
        withContext(Dispatchers.Main) {
            // UI թարմացում գլխավոր հոսքում
        }
    }