Junior
როგორ მუშაობს მთავარი ნაკადი Android-ში?
sobes.tech AI
პასუხი AI-სგან
ძირითადი ნაკადი (Main Thread) ანდროიდში პასუხისმგებელია მომხმარებლის ინტერფეისის ხატვის, შეტყობინებების დამუშავებისა და პროგრამის უმეტეს კომპონენტების (Activity, Service, Broadcast Receiver) შესრულებაზე.
მისი მუშაობა დაფუძნებულია Looper და Handler მექანიზმზე.
- Looper: ეს კლასი ციკლურად იღებს შეტყობინებებს (Message) MessageQueue-სგან და გადასცემს მათ შესაბამის Handler-ს დამუშავებისთვის. თითოეული ნაკადი, რომელსაც აქვს Looper, "პეტლიანი" ხდება. ძირითადი ნაკადი ავტომატურად ქმნის Looper-ს.
- MessageQueue: ეს მონაცემთა სტრუქტურა ინახავს შეტყობინებების სია, რომლებიც უნდა იქნას დამუშავებული. შეტყობინებები შეიძლება შეიცავდეს მონაცემებს (ობიექტები, პრიმიტივები) და Handler-ის ბმულს, რომელიც უნდა დაამუშავოს.
- Handler: ეს კლასი დაკავშირებულია Looper-სა და MessageQueue-სთან. ის საშუალებას აძლევს გაუგზავნოთ შეტყობინებები MessageQueue-ს და დამუშავდეს Looper-ის მიერ მიღებული შეტყობინებები. Handler შეიძლება გაუგზავნოს შეტყობინებები როგორც საკუთარ ნაკადს (მაგალითად, დავალებების დაგეგმვა), ასევე სხვა Looper-იანი ნაკადებს.
სამუშაო პრინციპი:
- ძირითადი ნაკადის Looper იწყება და უწყვეტად ახორციელებს
loop()ციკლს. - სისტემა ან სხვა ნაკადები გაუგზავნიან შეტყობინებებს (მაგალითად, შეხების მოვლენები, Activity-ის ცხოვრების ციკლის შეტყობინებები) Handler-ების საშუალებით MessageQueue-ს.
- Looper იღებს შემდეგ შეტყობინებას MessageQueue-დან.
- Looper გადასცემს შეტყობინებას შესაბამის Handler-ს.
- Handler ახორციელებს შეტყობინებას, შესაბამის ლოგიკას (მაგალითად, UI განახლება).
შენიშვნა: ყველა ოპერაცია, რომელიც დაკავშირებულია UI-ის განახლებასთან, უნდა შესრულდეს მხოლოდ ძირითადი ნაკადში. გრძელვადიანი ოპერაციების (საკვანძო მოთხოვნები, ფაილთან მუშაობა) შესრულება ძირითადი ნაკადში გამოიწვევს მისი დაბლოკვას (ANR - პროგრამა პასუხს არ სცემს) და აპლიკაციის გაყინვას. ასეთ ოპერაციებს უნდა გამოიყენოთ სამუშაო ნაკადები (მაგალითად, Coroutines, RxJava, ExecutorService, AsyncTask).