アンドロイドにActivity.runOnUiThread
またはHandler.post(runnable action)
を使用する場合の相違点/利点/欠点は何ですか?Activity.runOnUiThread(実行可能アクション)とHandler.post()の違いは何ですか?
答えて
Activity.runOnUiThreadは、その名前が示すように、UIを現在担当しているスレッドでRunnableを実行します。そのため、CPU集約型のタスクを使用すると、短時間の間UIが応答しなくなる可能性があります。逆に、Handlerは、スレッドの作成、コードの実行、完了時のUIへの通知(Handler.sendMessageなど)を提供します。
私ができるよりも、この優れたハンドラの状態のためのドキュメント:
プロセスは、あなたの アプリケーション用に作成されると、そのメインスレッドが を管理するの面倒をメッセージキュー を実行する を専用されていますトップレベルのアプリケーションオブジェクト (アクティビティ、ブロードキャストレシーバなど) とそれらが作成するウィンドウ。 独自のスレッドを作成することができ、 はHandlerを通じてメイン アプリケーションスレッドと通信して通信を戻すことができます。 これは、以前と同じ投稿 またはsendMessageメソッドを呼び出すことによって行われますが、新しいスレッドからは となります。与えられた の実行可能ファイルまたはメッセージは、ハンドラのメッセージ にスケジューリングされ、適切な場合に処理されます。
Activity.runOnUiThread()
は、より汎用的なハンドラの特殊なケースです。 Handler
を使用すると、独自のスレッド内で独自のイベントクエリを作成できます。デフォルトコンストラクタでインスタンス化されたハンドラを使用しても、一般に「コードはUIスレッドで実行される」という意味ではありません。デフォルトでは、ハンドラはインスタンス化されたThreadにバインドされています。あなたは、それを行うにはハンドラを使用しているrunOnuiThread()
メソッドの実装をチェックすると、
Handler mHandler = new Handler(Looper.getMainLooper());
さらに: は、UI(メイン)と結合することが保証されているハンドラあなたは、このようにメインルーパーにバインドさHandlerobjectを作成する必要がありますスレッドを作成します物事:あなたは上記のコードから見ることができるようにrunOnUiThread()
がUIスレッドから呼び出された場合
public final void runOnUiThread(Runnable action) {
if (Thread.currentThread() != mUiThread) {
mHandler.post(action);
} else {
action.run();
}
}
は、Runnableをアクションは、直ちに実行されます。さもなければ、それはHandlerにポストします。ハンドラは後である時点で実行されます。
- 1. AndroidでThread.run()とHandler.post()とServiceの違いは何ですか?
- 2. ソフトウェアBOTとは、「常に実行可能な実行可能ファイル」とソフトウェアサーバーの違いは何ですか?
- 3. 実行可能ファイルと共有ライブラリの違いは何ですか
- 4. 実行可能なjarライブラリ処理オプションの違いは何ですか?
- 5. エラボレーションフェーズの実行可能アーキテクチャとは何ですか?
- 6. Webファイルのx実行可能パーミッションとは何ですか?
- 7. Eclipse:ファイル保存アクションでFindBugsを実行することは可能ですか?
- 8. Playの実行と開始の違いは何ですか?
- 9. asInvokerとhighestAvailableの実行レベルの違いは何ですか?
- 10. アクションのインラインポストエンゲージメントとインラインポストエンゲージメントの違いは何ですか?
- 11. `warble実行可能warと` bundle exec warble executable war`との違い
- 12. Rails 3 - 最初のアクションを終了した後でアクションを実行することは可能ですか?
- 13. valgrindと正常実行の違いは何ですか?
- 14. 「コンパイル時間」と「実行時間」の違いは何ですか?
- 15. 実行フローとフローチェックの違いは何ですか?
- 16. ターゲットとアクションの違いは何ですか?
- 17. npm実行監視とnpm実行の違いは何ですか?
- 18. Searchlogicの実行可能な置き換えは何ですか?
- 19. Pythonの実行可能なデータベース抽象レイヤーは何ですか
- 20. 自己実行機能はDOMで実行可能ですか?
- 21. カフカのトピックのパーティションと利用可能なパーティションの違いは何ですか?
- 22. 「機能」と「機能」の違いは何ですか? VIMで?
- 23. MSVCの並行実行時のparallel_for_eachとparallel_forの違いは何ですか?
- 24. Microsoft Visual C再配布可能パッケージとランタイムパッケージの違いは何ですか?
- 25. 関数オブジェクトと呼び出し可能オブジェクトの違いは何ですか?
- 26. ダーティ・レディとリピート不可能なリードの違いは何ですか?
- 27. 違い、出力実行可能ファイルサイズの面で
- 28. 「フォーカス可能」と「クリック可能」の違い
- 29. 現在Windows Phone 7の実行可能なローカルデータベースとは何ですか?
- 30. フロア機能とトランケート機能の違いは何ですか?
同様の質問: [Handler.post(Runnable r)とActivity.runOnUiThread(Runnable r)の違い](http://stackoverflow.com/questions/7452884/difference-between-handler-postrunnable-r-and) - 活動 - runonuithreadrunnable) –