Androidで表示される基本的な質問があります。表示関数が呼び出されたときのスレッドの動作を理解できません。具体的には、Android スマートフォンの画面にサムネイル画像を表示するためのスレッドを作成するとします。
1-私の質問は、表示機能を呼び出した後でも (つまり、画像の表示が開始された後)、このスレッドがアクティブなままになるか、それともアイドル モードまたはスリープ モードになるかということです。
2-表示機能の正確な仕組み
Androidで表示される基本的な質問があります。表示関数が呼び出されたときのスレッドの動作を理解できません。具体的には、Android スマートフォンの画面にサムネイル画像を表示するためのスレッドを作成するとします。
1-私の質問は、表示機能を呼び出した後でも (つまり、画像の表示が開始された後)、このスレッドがアクティブなままになるか、それともアイドル モードまたはスリープ モードになるかということです。
2-表示機能の正確な仕組み
ワーカー スレッドから UI を直接更新することはできません。これを行うには、UI スレッドにいる必要があります。このために、android は、ワーカー スレッドから値を受け取り、メイン スレッドで UI を更新する Handler と AsyncTask を提供します。UI の更新は、メイン スレッド、つまりアクティビティの開始時に作成されたスレッドからのみ行うことができます。
そのため、ハンドラーまたは AsyncTask を使用してワーカー スレッドから UI を更新すると、ワーカー スレッドを破棄しない限り、(さらに作業を行う必要がある場合) ワーカー スレッドは実行され続けます。UI スレッド (メイン スレッド) も同時に実行されます。したがって、メイン スレッドは、メイン スレッドで発生するすべての UI イベント (クリック イベントなど) を処理する準備ができています。
これがスレッドの基本的な仕組みです。Android では、UI を更新するときはいつでもメイン スレッドに制御を渡す必要があることを知っておく必要があります。
Android アプリでは、メイン スレッド、または ui-thread と呼ばれるスレッドが UI の描画/更新を担当します。ワーカー スレッドで ui 操作を行うことはできません。
ただし、ワーカー スレッドから UI の更新を投稿する方法はいくつかあります。ワーカー スレッドまたは非同期タスクにアクティビティ インスタンスがある場合は、UI スレッドで Runnable を実行する activity.runOnUiThread(Runnable action) を投稿できます。