いくつかの通信および処理タスクにリモート サービサーを使用するアプリケーションに取り組んでいます。アプリケーションは正常に動作していますが、サーバーからのアンバインドで問題が発生し、アプリが不安定になっています。アプリのアーキテクチャは次のとおりです。
ここの写真を参照してください: https://docs.google.com/open?id=0B8aFlQkvXrcqbEFhSnRpVzJab3M
ご覧のとおり、Device というクラスのオブジェクトを作成し、サービス HealthService を開始し、このサービスが別のサービスを開始します。Device と HealthService 間の通信は AIDL を使用します。HealthService と BluetoothService の間の通信は Message を使用します。
通信は正常に機能し、データを取得しました。しかし、後で他のデバイスをバインドできるようにするためにこの通信チャネルを閉じたい場合、バインドは機能しません。これは、作成したすべてのデバイスがバインドを解除した後でも、データをリッスンして操作していることを意味します。それは私が解決したい多くの対立を引き起こしています。
ここにいくつかのコードがあります:
デバイス (ヘルスサービスのバインド):
intent= new Intent("com.signove.health.service.HealthService");
context.startService(intent);
context.bindService(intent, serviceConnection, 0);
デバイス (ヘルスサービスのバインドを解除):
context.unbindService(serviceConnection);
Log.w("kill", "Device: Service connection unbinded");
Log.w("kill", "Device: Binded = " + Boolean.toString(api.asBinder().isBinderAlive()));
isBinderAlive は常に true を返します...
stopService を使用してサービスを破棄しようとしましたが、これによりクラッシュが発生します。サービスでは、onUnbind がアクセスされます。onUnbind が呼び出されると、サービスが他のサービスから unBind を作成してすべてをクリーンアップするように実装しましたが、クラッシュし続けます。
誰かが私を助けることができますか?:)。必要に応じて、さらに情報を尋ねます。