関連するすべてのスレッドは次のとおりです。
アクティビティを実行しているとき (コンテンツ ビューの設定、いくつかのボタンの取り付け、いくつかのダイアログ メッセージ)
ここでは、UI スレッドまたはメイン スレッドが関与します。
AsyncTask を使用したアクティビティ
UI Thread と WorkerThread の両方が関係しています。
AsyncTaskを使用すると、UI スレッドを適切かつ簡単に使用できます。このクラスを使用すると、スレッドやハンドラーを操作することなく、バックグラウンド操作を実行し、UI スレッドで結果を発行できます。
4つのステップ
非同期タスクが実行されると、タスクは次の 4 つのステップを経ます。
onPreExecute()
、タスクが実行される前に UI スレッドで呼び出されます。このステップは、通常、タスクをセットアップするために使用されます。たとえば、ユーザー インターフェイスに進行状況バーを表示します。
doInBackground(Params...)
onPreExecute()
、実行が終了した直後にバックグラウンド スレッドで呼び出されます。このステップは、時間がかかる可能性のあるバックグラウンド計算を実行するために使用されます。このステップはpublishProgress(Progress...)
、進行状況の 1 つ以上のユニットを公開するためにも使用できます。これらの値は、UI スレッドのonProgressUpdate(Progress...)
ステップで発行されます。
onProgressUpdate
(Progress...) への呼び出し後に UI スレッドで呼び出されますpublishProgress(Progress...)
。このメソッドは、バックグラウンド計算がまだ実行されている間に、ユーザー インターフェイスに任意の形式の進行状況を表示するために使用されます。
onPostExecute
(結果)、バックグラウンド計算が終了した後に UI スレッドで呼び出されます。バックグラウンド計算の結果は、パラメーターとしてこのステップに渡されます。
バックグラウンド サービス
IntentServiceクラスは、単一のバックグラウンド スレッドで操作を実行するための単純な構造を提供します。これにより、ユーザー インターフェイスの応答性に影響を与えることなく、長時間実行される操作を処理できます。
HTTP 呼び出し
NetwokrkOperation は UI スレッド (または MainThread) から実行できません。したがって、AsyncTaskやHandlerThreadなどの代替手段を使用してください
関連記事:
ハンドラ vs AsyncTask vs スレッド
Android で HandlerThread を使用する理由
Asynctask vs スレッド vs サービス vs ローダー