Saj*_*uzi 19 java profile cpu performance android
我知道线程有一个消息队列,处理程序能够将runnables或消息推送到它们,但是当我使用Android Studio工具分析我的android应用程序时,有一个奇怪的过程:
android.os.MessageQueue.nativePollOnce
它使用CPU比所有其他进程更多.它是什么以及如何减少CPU花费的时间?您可以在下面找到分析器结果.
Law*_*usz 30
简短回答:
该nativePollOnce方法用于"等待"直到下一个Message变得可用.如果在此调用期间花费的时间很长,则您的主(UI)线程无需执行任何实际工作,并等待下一个要处理的事件.没有必要担心这一点.
说明:
因为"主"线程负责绘制UI和处理各种事件,所以它Runnable有一个处理所有这些事件的循环.循环由a管理Looper,它的工作非常简单:它处理所有的消息MessageQueue.
A Message被添加到队列中,例如响应输入事件,帧渲染回调甚至是您自己的Handler.post调用.有时主线程没有工作要做(也就是说,队列中没有消息),这可能发生在例如完成渲染单帧之后(线程刚刚绘制了一帧并准备好下一帧,只是等待一个恰当的时候).由于消息以不可预测的方式添加到队列中,因此该MessageQueue方法(在其中Message next()调用)会主动检查使用CPU周期的新消息.
结论:
你不应该担心boolean enqueueMessage(Message, long).它只表示已完成所有消息的处理,并且线程等待下一个消息.嗯,这只是意味着你不会给你的主线程太多的工作;)