为什么Looper.loop()不阻止主线程

问题描述 投票:0回答:1

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?

android linux android-source epoll android-looper
1个回答
0
投票

消息不需要由主线程本身排队。 Handler的主要用例之一是将消息发布到另一个线程。例如:

  1. 在主线程上创建一个Handler,以便将其绑定到主线程的弯针。

  2. 将其交给另一个线程,该线程可以发布要由主线程处理的消息。

非常普遍,每个Activity都会创建自己的Handler,该Activity.runOnUiThread()用于Activity.runOnUiThread()从后台线程发送UI任务。

© www.soinside.com 2019 - 2024. All rights reserved.