Handler & Looper
Когда речь заходит о многопоточности, почти все статьи забывают рассказать о том, как главному потоку (aka main thread) удается не заканчиваться
Ведь любой Thread выполняет метод run() и после этого останавливается! MainThread не исключение!
Значит, в методе run главного потока крутится бесконечный while(true), в теле которого раз за разом проверяются все события, происходит отрисовка графики и прочие штуки, которые мы выполняем в главном потоке
Так оно и есть, только немного (много) сложнее и скрыто за абстракциями:
• Looper (Looper.prepare(), Looper.loop(), Looper.quit()) — создает в методе run бесконечный цикл, который не позволяет потоку "закончиться"
• MessageQueue — очередь, в которую складываются приходящие команды. На каждой итерации бесконечного цикла из очереди будут выниматься команды и выполняться
• Handler — забирает команду (Message) из вашего кода и кладет ее в MessageQueue
вы можете закольцевать любой поток, использовав эти механизмы
....
сколько циклов в секунду должен успевать делать Looper главного потока, чтобы приложением можно было пользоваться с комфортом (без просадки кадров в секунду)?
Post #31
1.92K