Androidでアクティビティとサービスの間で通信する方法は何ですか?
今日は、Activity から Intent を送信し、BroadcastRecevier を使用して返信することで通信する方法を学びました。
私の他のオプションはどれですか?これに関するチュートリアル/リファレンスはありますか?
この質問に対する答えは次のとおりです。
アクティビティがサービスと通信する方法はいくつかあり、その逆も同様です。このセクションでは、さまざまな方法について説明し、使用する推奨事項を示します。
5.1. ローカル サービスへのアクティビティ バインディング サービスがアクティビティと同じプロセスで開始される場合、アクティビティはサービスに直接バインドできます。これは、比較的シンプルで効率的なコミュニケーション方法です。
5.2. レシーバーの使用 動的に登録されたレシーバーを通信に使用することもできます。たとえば、アクティビティは動的に受信者を登録でき、サービスは対応するイベントを送信します。
5.3. 異なるプロセスのサービスの AIDL 異なるプロセスで実行されるサービスにバインドするには、異なるプロセス間でデータを送信する必要があるため、プロセス間通信 (IPC) を使用する必要があります。このためには、Java インターフェースに似ているが .aidl ファイル拡張子で終わり、他の AIDL ファイルの拡張のみが許可される AIDL ファイルを作成する必要があります。
このアプローチは、サービスを他のアプリケーションに提供する必要がある場合に必要です。それ以外の場合は、ローカル サービスを優先する必要があります。
5.4. サービスへの Intent データとバンドルの送信 サービスは、起動中の Android コンポーネントからデータを受け取り、このデータを使用できます。
5.5. ハンドラーとメッセンジャー サービスがアクティビティに通信する必要がある場合、アクティビティから受け取るインテント データを介してタイプ メッセンジャーのオブジェクトを受け取ることができます。Messenger がアクティビティの Handler にバインドされている場合、サービスは Message タイプのオブジェクトをアクティビティに送信できます。
Messenger はパーセル可能です。つまり、別のプロセスに渡すことができ、このオブジェクトを使用してアクティビティ内の Handler にメッセージを送信できます。
Messenger は、Messenger をアクティビティに渡すことができるメソッド getBinder() も提供します。したがって、アクティビティはメッセージをサービスに送信できます。
http://www.vogella.com/articles/AndroidServices/article.htmlに感謝します