Sobes.tech
Junior

როგორ მუშაობს მთავარი ნაკადი Android-ში?

sobes.tech AI

პასუხი AI-სგან

ძირითადი ნაკადი (Main Thread) ანდროიდში პასუხისმგებელია მომხმარებლის ინტერფეისის ხატვის, შეტყობინებების დამუშავებისა და პროგრამის უმეტეს კომპონენტების (Activity, Service, Broadcast Receiver) შესრულებაზე.

მისი მუშაობა დაფუძნებულია Looper და Handler მექანიზმზე.

  1. Looper: ეს კლასი ციკლურად იღებს შეტყობინებებს (Message) MessageQueue-სგან და გადასცემს მათ შესაბამის Handler-ს დამუშავებისთვის. თითოეული ნაკადი, რომელსაც აქვს Looper, "პეტლიანი" ხდება. ძირითადი ნაკადი ავტომატურად ქმნის Looper-ს.
  2. MessageQueue: ეს მონაცემთა სტრუქტურა ინახავს შეტყობინებების სია, რომლებიც უნდა იქნას დამუშავებული. შეტყობინებები შეიძლება შეიცავდეს მონაცემებს (ობიექტები, პრიმიტივები) და Handler-ის ბმულს, რომელიც უნდა დაამუშავოს.
  3. Handler: ეს კლასი დაკავშირებულია Looper-სა და MessageQueue-სთან. ის საშუალებას აძლევს გაუგზავნოთ შეტყობინებები MessageQueue-ს და დამუშავდეს Looper-ის მიერ მიღებული შეტყობინებები. Handler შეიძლება გაუგზავნოს შეტყობინებები როგორც საკუთარ ნაკადს (მაგალითად, დავალებების დაგეგმვა), ასევე სხვა Looper-იანი ნაკადებს.

სამუშაო პრინციპი:

  1. ძირითადი ნაკადის Looper იწყება და უწყვეტად ახორციელებს loop() ციკლს.
  2. სისტემა ან სხვა ნაკადები გაუგზავნიან შეტყობინებებს (მაგალითად, შეხების მოვლენები, Activity-ის ცხოვრების ციკლის შეტყობინებები) Handler-ების საშუალებით MessageQueue-ს.
  3. Looper იღებს შემდეგ შეტყობინებას MessageQueue-დან.
  4. Looper გადასცემს შეტყობინებას შესაბამის Handler-ს.
  5. Handler ახორციელებს შეტყობინებას, შესაბამის ლოგიკას (მაგალითად, UI განახლება).

შენიშვნა: ყველა ოპერაცია, რომელიც დაკავშირებულია UI-ის განახლებასთან, უნდა შესრულდეს მხოლოდ ძირითადი ნაკადში. გრძელვადიანი ოპერაციების (საკვანძო მოთხოვნები, ფაილთან მუშაობა) შესრულება ძირითადი ნაკადში გამოიწვევს მისი დაბლოკვას (ANR - პროგრამა პასუხს არ სცემს) და აპლიკაციის გაყინვას. ასეთ ოპერაციებს უნდა გამოიყენოთ სამუშაო ნაკადები (მაგალითად, Coroutines, RxJava, ExecutorService, AsyncTask).