Sobes.tech
Middle

Ի՞նչ է Looper-ը Android-ում։

sobes.tech AI

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

Looper-ը օբյեկտ է, որը նախատեսված է միաժամանակ մի գործառույթ մի քանի անգամ կատարել մեկ հոսքում: Այն ստեղծում է իրադարձությունների ցիկլ, որը մշակվում է MessageQueue-ից (հաղորդագրությունների հերթից) հաղորդագրությունները:

Հիմնական բաղադրիչները՝

  • MessageQueue՝ գործառույթների կամ հաղորդագրությունների հերթը:
  • Looper՝ օբյեկտ, որը հանում է հաղորդագրությունները MessageQueue-ից և ուղարկում դրանք համապատասխան Handler-ին:
  • Handler՝ օբյեկտ, որը կապված է որոշակի Thread-ի և MessageQueue-ի հետ: Այն օգտագործվում է հաղորդագրությունները MessageQueue-ին ուղարկելու և դրանց մշակման համար:

Աշխատանքի սկզբունքը՝

  1. Որոշ Thread, որը ցանկանում է օգտագործել Looper-ը, կանչում է Looper.prepare()՝ Looper և MessageQueue ստեղծելու համար:
  2. Thread-ը կանչում է Looper.loop()՝ հաղորդագրությունների մշակման ցիկլը սկսելու համար: Այս ֆունկցիան բլոկավորում է Thread-ը մինչև Looper.quit()-ի կանչը:
  3. Handler-ը ստեղծում և ուղարկում հաղորդագրություններ MessageQueue-ին, որոնք կապված են այս Looper-ի հետ:
  4. Looper-ը դուրս է բերում հաղորդագրությունները MessageQueue-ից հերթականությամբ և վերադարձնում դրանք Handler-ին handleMessage() մեթոդում մշակելու համար:

Հավելվածներ՝

  • Android-ի UI Thread-ը օգտագործում է Looper-ը՝ իրադարձությունները, ինչպիսիք են սեղմումները և շոշափումները, մշակելու համար՝ առանց UI-ն բլոկավորելու:
  • Պատկերաբանական Thread-երը կարող են օգտագործել Looper-ը՝ կրկնվող գործառույթներ կատարելու կամ այլ Thread-ներից ուղարկված հաղորդագրությունները մշակելու համար:
// Օրինակ՝ Looper-ի ստեղծում և գործարկում ֆոնային Thread-ում
class WorkerThread extends Thread {
    public Handler handler;

    public void run() {
        Looper.prepare(); // Ստեղծում ենք Looper և MessageQueue այս Thread-ի համար
        handler = new Handler(Looper.myLooper()) { // Ստեղծում ենք Handler
            @Override
            public void handleMessage(Message msg) {
                // Հաղորդագրության մշակումը այստեղ
            }
        };
        Looper.loop(); // Սկսում ենք հաղորդագրությունների ցիկլը
    }
}