サービスと通信するには、次の 3 つのオプションがあります。
- インテントにエクストラを追加して、startService を呼び出します。サービスがすでに実行されている場合でも、複数回呼び出すことができます
- Messenger を作成し、それを使用してサービスと通信する
- bindService を使用する
サービスで必ず使用START_STICKY
して、アクティビティが終了した後も実行を継続startForeground()
し、通知を表示しないと、しばらくして (平均で 30 分から 1 時間) SO によってサービスが強制終了されます。
開始フロー:
- ClientActivity (CA) はサービスを開始し、CA Messenger アドレスをインテントのエクストラとしてサービスに送信します。
- サービスの開始時に、サービスの Messenger アドレスを CA に送り返します (CA Messenger アドレスを使用してメッセージを送信します)。
- 最後に、サービスは START_STICKY を返します。
この両方を使用すると、クライアントとサーバーはお互いの Messenger アドレスを認識し、バインドは必要ありません。
サービスを停止するには:
サービスを停止するには、アクティビティで次を使用します。
stopService(new Intent(ActivityClass.this, ServiceClass.class));
再接続:
クライアント アクティビティ (CA) を離れ、アプリの再起動時にサービスに再接続する場合は、次の 2 つのオプションがあります。
- CA から startService を再度呼び出します。これにより、サービス内の が再度呼び出されonStartCommand
ます。サービスonCreate()
がまだ実行されていない場合にのみ、サービスが呼び出されます。上記の開始フローを使用して、Messenger サービスを取得できます。
- サービス Messenger を public および static にすることができますpublic static Messenger mMsgService = null;
。そのため、CA が起動すると、サービス メッセンジャーが初期化されている (null でない) かどうかを確認し、それを使用してサービスと通信できます。setvice が停止したら、設定する必要がありますmMsgService = null;
幸運を。