2

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に感謝します

4

2 に答える 2

4

アクティビティをサービスに接続する方法:

  1. ブロードキャスト: 最も簡単な方法はBroadcastReciever、それぞれに を実装して、他のユーザーのアクションをリッスンすることです。

  2. メッセンジャー: 複数のタイプのクライアントに非常に適しています. サービスとクライアントの両方に がありますMessenger. サービスは でメッセンジャーを提供しonBind()ます. クライアントはメッセージの独自のメッセンジャーで登録/登録解除メッセージを送信しreplyTo()ます. サービスは、クライアント メッセンジャーを保存します。これで、両方がメッセージを送受信できるようになりました。

  3. IBinder: 本格的なリモート IPC が必要な場合。AIDL を使用してサービスのインターフェイスを定義し、実装をクライアントに渡しますonBind()

Androidオンライン リファレンスには、それぞれの説明があります。

于 2013-02-04T12:47:19.747 に答える
-2

みんな正しいです、あなたは本当に答えをグーグルするべきです!

しかし、私は最近、サービスにインテントを送信するためのきちんとした方法を学びました。電話をかけるだけstartService(myIntent)で、サービスにインテントを送信できます。サービスが実行されていない場合は、サービスが開始されます。サービスが実行されている場合は、新しい情報に対応する可能性があります。

于 2013-02-04T12:44:19.403 に答える