ホームページ >Java >&#&チュートリアル >Android サービスでクロススレッド通信を処理するにはどうすればよいですか?

Android サービスでクロススレッド通信を処理するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-30 14:43:11858ブラウズ

How to Handle Cross-Thread Communication in Android Services?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。