即使调用了postInvalidate()来触发onDraw(),UI线程也会休眠

时间:2013-07-11 12:51:45

标签: android user-interface sleep invalidation

我的观点与postInvalidate有问题。我有一个名为MainFormViewRefresh的线程定期唤醒,只为我的视图调用postInvalidate()方法。这应该唤醒main UI线程并最终调用视图的onDraw()方法并重新绘制,但即使调用postInvalidate(),主线程也只是长时间休眠。

MessageQueue#nativePollOnce上阻止了UI线程,并且它未从postInvalidate()唤醒。即使有事情要做,它为什么要睡觉?它错过了我的postInvalidate()电话吗?我的理解是postInvalidate应该在队列中放置一个事件并唤醒nativePollOnce上的UI线程阻塞。 CPU只有50%,因为大约有一半时间处于睡眠状态。

图片说明了问题所在。 MainFormViewRefresh上的每个活动峰值都以对postInvalidate()的调用结束。主线程中的不活动时段是其在MessageQueue#nativePollOnce中被阻止的时间。可以看出,postInvalidate()被多次调用而没有唤醒主线程。

main主题上的主要活动期为onDraw()(蓝色)。

View of running threads

0 个答案:

没有答案