アンドロイドに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. 実行可能なjarライブラリ処理オプションの違いは何ですか?
- 3. エラボレーションフェーズの実行可能アーキテクチャとは何ですか?
- 4. Eclipse:ファイル保存アクションでFindBugsを実行することは可能ですか?
- 5. Playの実行と開始の違いは何ですか?
- 6. asInvokerとhighestAvailableの実行レベルの違いは何ですか?
- 7. Rails 3 - 最初のアクションを終了した後でアクションを実行することは可能ですか?
- 8. 「コンパイル時間」と「実行時間」の違いは何ですか?
- 9. valgrindと正常実行の違いは何ですか?
- 10. Pythonの実行可能なデータベース抽象レイヤーは何ですか
- 11. Searchlogicの実行可能な置き換えは何ですか?
- 12. 自己実行機能はDOMで実行可能ですか?
- 13. 違い、出力実行可能ファイルサイズの面で
- 14. 「フォーカス可能」と「クリック可能」の違い
- 15. 「機能」と「機能」の違いは何ですか? VIMで?
- 16. MSVCの並行実行時のparallel_for_eachとparallel_forの違いは何ですか?
- 17. 現在Windows Phone 7の実行可能なローカルデータベースとは何ですか?
- 18. ディレクトリを実行可能にするのは間違っていますか?
- 19. Microsoft Visual C再配布可能パッケージとランタイムパッケージの違いは何ですか?
- 20. 関数オブジェクトと呼び出し可能オブジェクトの違いは何ですか?
- 21. PHPを実行可能なウェブサイトとして実行可能
- 22. 元に戻すのは難しい/実行不可能ないくつかのアクションはありますか?
- 23. netbeansからアプリケーションを実行してjarを実行することとの違いは何ですか?
- 24. Cで実行可能なC実行可能ファイルをCで実行するシェルスクリプトから実行する
- 25. TextBox.Triggers(イベントトリガ)で何らかのアクションを実行するには?
- 26. 可能な最大タイムゾーンの相違は何ですか
- 27. SAFELY Windowsで実行可能な実行可能ファイルへのパス
- 28. 実行可能ファイルをMS-DOSプログラムに渡すことは可能ですか?
- 29. Visual Studioデバッガと実行可能ファイルをデバッガなしで実行する場合の違い
- 30. アンドロイドエミュレータでviberを実行することは可能ですか?
同様の質問: [Handler.post(Runnable r)とActivity.runOnUiThread(Runnable r)の違い](http://stackoverflow.com/questions/7452884/difference-between-handler-postrunnable-r-and) - 活動 - runonuithreadrunnable) –