我的观点与postInvalidate
有问题。我有一个名为MainFormViewRefresh
的线程定期唤醒,只为我的视图调用postInvalidate()
方法。这应该唤醒main
UI线程并最终调用视图的onDraw()
方法并重新绘制,但即使调用postInvalidate()
,主线程也只是长时间休眠。
在MessageQueue#nativePollOnce
上阻止了UI线程,并且它未从postInvalidate()
唤醒。即使有事情要做,它为什么要睡觉?它错过了我的postInvalidate()
电话吗?我的理解是postInvalidate
应该在队列中放置一个事件并唤醒nativePollOnce
上的UI线程阻塞。 CPU只有50%,因为大约有一半时间处于睡眠状态。
图片说明了问题所在。 MainFormViewRefresh上的每个活动峰值都以对postInvalidate()
的调用结束。主线程中的不活动时段是其在MessageQueue#nativePollOnce
中被阻止的时间。可以看出,postInvalidate()
被多次调用而没有唤醒主线程。
main
主题上的主要活动期为onDraw()
(蓝色)。