1

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

UI 线程被阻塞MessageQueue#nativePollOnce,它不会从postInvalidate(). 为什么它有事要睡觉?它错过了我的postInvalidate()电话吗?我的理解是postInvalidate应该在队列中放置一个事件并唤醒阻塞的 UI 线程nativePollOnce。CPU 最多只有 50%,因为它大约有一半的时间在休眠。

图片说明了这个问题。MainFormViewRefresh 上的每个活动峰值都以调用postInvalidate(). 主线程中的不活动时间段是其花费的时间MessageQueue#nativePollOnce。可以看出,postInvalidate()在不唤醒主线程的情况下多次调用。

main线程上的主要活动周期是onDraw()(蓝色)。

正在运行的线程视图

4

0 回答 0