0

開始型とバインド型の両方のサービスがあります(ここで定義されています)。無期限に実行が開始され、別のアプリケーションがバインドされます。このアプリケーションが破棄されると、unbindServiceそのonDestroyメソッドで が呼び出されます。

サービスは、このアプリケーションが終了したことを検出する必要があります。サービスによって公開された特定のインターフェイスからすべてのクライアントが切断されたときに呼び出されるonUnbindメソッドについて読みました。ただし、すべてのクライアントが切断されたときではなく、切断されたときに知る必要があります。出来ますか?

私は、(メソッド内で) クローズ中にonDestroy、アプリケーションがサービスにメッセージを送信できると考えました (サービスがバインドされているという事実を利用して): 後でunbindService、次のようにメソッドを呼び出す必要があります。

// method of the application
@Override
public void onDestroy() {
    super.onDestroy();
    service.closed();   // service is defined by IService.aidl
    unbindService(...);
}

このようにして、アプリケーションは最後のメッセージをサービス (service.closed()メソッド) に送信してから、サービスのバインドを解除します。正しく動作するでしょうか?service.closed()メッセージが宛先に到着したとき、メソッドは戻りますか? または、メソッドへの次の呼び出しのためにメッセージが配信されないというリスクがある可能性はありますunbindServiceか?

4

1 に答える 1

2

出来ますか?

バインドを解除する前にアクティビティにメソッドを呼び出してBinder、接続をドロップしていることを示します。

正しく動作するでしょうか?

そうすべき。AIDL 呼び出しは同期的であるため、サンプルでが で呼び出されるunbindService()まで発生しません。Binderclosed()

于 2012-04-29T18:14:57.417 に答える