Android には というクラスがありViewRootImpl
ます。このクラスは、画面に表示されるすべてのウィンドウによって所有されます (ウィンドウという用語はここでは少し紛らわしいため、この説明では、ウィンドウは上部にダイアログやポップアップがないメイン アクティビティのレイアウトです)。このレイアウトは常にトラバースされています。つまり、Android はこのウィンドウのダーティな四角形を取得して描画するのを待っているだけです。このウィンドウには多くのビュー (ボタンなど) が含まれている可能性があるため、すべてのビューを調べて、それぞれに再描画が必要かどうかを尋ねます。各ビューはダーティな四角形を返し、ViewRootImpl
これらすべての四角形は 1 つの大きな四角形に結合され、最終的に再描画されます。
なぜそれをするのですか?さて、 は描画するものをViewRootImpl
求めます。これは、トラバーサルがあるたびに、1 つのウィンドウ内のすべてのビューが実際に を共有することを意味します。WindowManagerService
Canvas
Canvas
あなたの質問に関しては、特定の 1 つView
だけがダーティな四角形を持っていた場合、そのダーティな四角形だけが描画されますが、別のビューにもダーティな四角形があったため、ダーティな四角形には両方が含まれています。