1

UI スレッドの仕組みについてちょっとした質問があります。

たとえば、ユーザーが画面上のボタンをタッチすると、アプリの UI スレッドがタッチ イベントをウィジェットにディスパッチし、ウィジェットが押された状態を設定して、無効化リクエストをイベント キューにポストします。UI スレッドはリクエストをデキューし、ウィジェット自体を再描画する必要があることを通知します。

だから私が理解しているのは、ボタンが押された状態をtrueに設定するということですが、「無効化リクエストをイベントキューに投稿する」とはどういう意味ですか。これは単に、押された状態を true に設定したことをボタンが UI スレッドに伝えていることを意味しますか? そして、押された状態をtrueに設定した後、ボタンがそれ自体を描画しないのはなぜですか? UI スレッドが自分自身を再描画するように指示する必要があるのはなぜですか? これがどこまで正確かはわかりませんが UI スレッド イベント ディスパッチ スレッドの画像が少し良くなります。Widgets 呼び出しがディスパッチ キューに対して無効になり、UI スレッドがウィジェットに再描画を要求する理由を説明できる人はいますか?

4

1 に答える 1

0

Button の状態が変わると、明らかに再描画する必要があります。あまり明らかではありませんが、他の一部のコントロールでも再描画が必要になる場合があります。ボタンが半透明の場合、ボタンを再描画するには、その下のコントロールを再描画してから、上部のボタンを再描画する必要があります。

無効化リクエストは、「再描画する必要がある」だけでなく、「画面上のこの領域は再描画する必要があります」と言い、画面上の領域を再描画するには、他のコントロールを (再) 描画する必要がある場合があります。

また、領域を無効化すると、UI スレッドは再描画を組み合わせることができ、(無効化された領域と交差する可能性がある) それぞれを再描画する代わりに、それらを 1 つの領域に結合し、単一の再描画を実行します。これにより、ユーザーから見たパフォーマンスと UI の応答性が向上します。

于 2013-04-06T16:15:00.677 に答える