Looper的loop方法在ActivityThread的main方法内部被调用,并启动一个无限for loop
,它在消息队列上进行迭代。当队列中没有更多消息时,它将调用nativePollOnce
方法,等待下一条消息。所以我的问题是1.如果它等待下一条消息,那么主线程将被阻塞,那么它将如何排队更多的消息队列。2.如果它没有被阻塞,那么它将消耗CPU周期,而其他人则没有机会在队列中添加消息。请考虑到MessageQueue,Handler,Looper在主线程和UI事件以及由主线程处理的输入事件上。链接Why main thread's Looper.loop() doesn't block UI thread?Why does Looper.loop() not block the UI threadandroid - what is message queue native poll once in android?Does an Android Looper thread use processing power?
消息不需要由主线程本身排队。 Handler
的主要用例之一是将消息发布到另一个线程。例如:
在主线程上创建一个Handler
,以便将其绑定到主线程的弯针。
将其交给另一个线程,该线程可以发布要由主线程处理的消息。
非常普遍,每个Activity
都会创建自己的Handler
,该Activity.runOnUiThread()
用于Activity.runOnUiThread()
从后台线程发送UI任务。