ホームページ >Java >&#&チュートリアル >Android サービスでクロススレッド通信を処理するにはどうすればよいですか?
Android サービスでは、メイン UI スレッドをブロックせずにリソースを大量に消費するタスクを実行するために、マルチスレッドがよく使用されます。ただし、メッセージ キューにタスクを投稿するなど、バックグラウンド スレッドがメイン スレッドと対話する必要がある状況が発生します。
これに対処するために、Android フレームワークは、ハンドラーを使用したクロススレッド通信のメカニズムを提供します。 Handler は、指定された Looper でメッセージを処理できるオブジェクトです。メイン スレッドの Looper に関連付けられたハンドラーを使用すると、他のスレッドからメイン スレッドのメッセージ キューにタスクをポストできます。
解決策 1: コンテキスト オブジェクトを使用する
バックグラウンド スレッドに Context オブジェクト (アプリケーション コンテキストまたはサービス コンテキスト) への参照がある場合、次のようにメイン Looper のハンドラーにアクセスできます。
// Get a handler that can be used to post to the main thread Handler mainHandler = new Handler(context.getMainLooper()); // Prepare a Runnable task to be posted Runnable myRunnable = new Runnable() { @Override public void run() {....} // This is your code }; // Post the task to the main thread mainHandler.post(myRunnable);
解決策 2: Context オブジェクトを使用しない
バックグラウンド スレッドが Context オブジェクトにアクセスできない場合は、より直接的なアプローチを使用できます。 @dzeikei が提案したように:
// Get a handler that can be used to post to the main thread Handler mainHandler = new Handler(Looper.getMainLooper()); // Prepare a Runnable task to be posted Runnable myRunnable = new Runnable() { @Override public void run() {....} // This is your code }; // Post the task to the main thread mainHandler.post(myRunnable);
以上がAndroid サービスでクロススレッド通信を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。