web-dev-qa-db-ja.com

スレッドとハンドラーの違いは何ですか

スレッドとハンドラーの違いを見つけようとしています。新しいハンドラーを作成すると、新しいスレッドが作成されますか? post()を使用して新しいハンドラーを実行すると、新しいスレッドが作成されますか?説明してください

20
abat

スレッドは、ほとんどのことを実行できる一般的な処理タスクですが、実行できないことの1つは、UIを更新することです。

一方、ハンドラーは、UIスレッドとの通信(UIの更新)を可能にするスレッドにバインドされています。

したがって、たとえば、ハンドラーに投稿されたメッセージ(Runnable)を介してトーストを表示したり、プログレスバーを更新したりできますが、このrunnableをスレッドとして開始した場合はできません。

ハンドラーを使用すると、MessageQueuing、スケジューリング、繰り返しなどを行うこともできます。

Androidでスレッドが必要な状況にはまだ遭遇していません。

私は主にAsyncTasksとHandlersの組み合わせを使用します。

前述のタスクのハンドラー。

ダウンロード/データのフェッチやポーリングなどのためのAsyncTasks。

Androidでのスレッド化については、開発者向けの記事「 Painless Threading "」をご覧ください。

修正:各ハンドラーインスタンスは、単一のスレッドとそのスレッドのメッセージキューに関連付けられています。それらは、それ自体に代わってスレッドではありません。説明されているように ここ

21
MahdeTo

スレッドは、実行中のプロセスを定義します。 Androidにメイン(UIスレッド)があるように。他のすべてのスレッドはバックグラウンドで実行されます(並列)。

ハンドラーは完全に異なり、ハンドラーで定義されたタスクを開始するようなものです。

混乱を解消し、Androidでスレッド化を実行するには: http://Android-developers.blogspot.com/2009/05/painless-threading.html)を読む必要があります

そして、私はすべての場合にスレッドを使用する代わりにAsyncTaskを提案します。

2
Rahul garg

スレッドでハンドラーを使用する理由:

Androidにアプリケーションをインストールすると、MAIN UIスレッドと呼ばれるそのアプリケーションのスレッドが作成されます。すべてのアクティビティはそのスレッド内で実行されます。Androidシングルスレッドモデルルールそのアクティビティ内で定義された別のスレッドのUI要素(ビットマップ、テキストビューなど)に直接アクセスすることはできません。

したがって、別のスレッドでメインUIスレッド要素にアクセスする場合は、ハンドラーを使用します。

0
Arpit Patel