Android の UI スレッドだけが UI を更新できる理由を教えてください。他のスレッドが UI を更新できないのはなぜですか?
2 に答える
Thread に関するアンドロイド開発者ガイドに記載されているように:
アプリがユーザーの操作に応じて集中的な作業を実行する場合、アプリケーションを適切に実装しない限り、このシングル スレッド モデルではパフォーマンスが低下する可能性があります。具体的には、UI スレッドですべてが発生している場合、ネットワーク アクセスやデータベース クエリなどの長時間の操作を実行すると、UI 全体がブロックされます。スレッドがブロックされると、描画イベントを含め、イベントをディスパッチできなくなります。ユーザーの観点からは、アプリケーションがハングしているように見えます。さらに悪いことに、UI スレッドが数秒以上 (現在は約 5 秒) ブロックされている場合、ユーザーには悪名高い「アプリケーションが応答していません」(ANR) ダイアログが表示されます。その後、ユーザーはアプリケーションを終了し、不満がある場合はアンインストールすることを決定する可能性があります。
さらに、Andoid UI ツールキットはスレッドセーフではありません。したがって、ワーカー スレッドから UI を操作してはなりません。UI スレッドからユーザー インターフェイスに対するすべての操作を行う必要があります。したがって、Android のシングル スレッド モデルには 2 つのルールがあります。
UI スレッドをブロックしない UI スレッドの外部から Android UI ツールキットにアクセスしない