私の見方に問題がありpostInvalidate
ます。MainFormViewRefresh
定期的にウェイクアップpostInvalidate()
し、ビューのメソッドのみを呼び出すスレッドがあります。これにより、main
UI スレッドが起動し、最終的にビューのonDraw()
メソッドが呼び出されて再描画されるはずですが、メイン スレッドはpostInvalidate()
が呼び出されても長時間スリープ状態になっています。
UI スレッドがブロックされてMessageQueue#nativePollOnce
おり、から復帰しませんpostInvalidate()
。用事があっても寝ているのはなぜ?私のpostInvalidate()
電話がありませんか?私の理解では、 はpostInvalidate
イベントをキューに入れ、 でブロックしている UI スレッドを起動する必要がありますnativePollOnce
。CPU は約半分の時間スリープしているため、最大 50% しか使用されていません。
写真は問題を示しています。MainFormViewRefresh のアクティビティの各スパイクは、への呼び出しで終了しますpostInvalidate()
。メイン スレッドの非アクティブ期間は、ブロックされている時間MessageQueue#nativePollOnce
です。ご覧のとおりpostInvalidate()
、メイン スレッドを起動せずに数回呼び出されます。
main
スレッドの主な活動期間はonDraw()
(青) です。