1

私はAndroidサービスにバインドするAndroidアプリを開発中です。Androidサービスのアンバインド時にアプリケーションがクラッシュまたは終了する

問題は、Androidサービスが別のデバイスとのBluetooth接続を担当していることです。

今のところ私のサービスではDisconnectBluetooth()メソッドが公開されており、これによりBluetooth接続が終了します。

私が行うことは、onDestroyメソッドの中でunbindServiceメソッドを呼び出した後、DisconnectBluetoothメソッドを呼び出すことです。アプリケーションが停止すると、Bluetooth接続が閉じられ、サービスはアンバインドされます。

事は私のアプリであればクラッシュということである、または私はアプリのセレクタでそれをswippingによって終了にそれを強制するとき、時々、onDestroyメソッドが呼び出されません。アプリは終了するが、サービスはまだ生きているので、Bluetooth接続もまだ生きている。

Bluetooth接続を確実に閉じるために、可能な場合はサービスのバインドを解除するにはどうすればよいですか?

@Override 
protected void onDestroy() { 
     if (_api.isConnect()) { //<-- If bound to service, and everything OK 
     _api.DisonnectBluetooth(); //<-- Close BT connection with device 
     _api.ReleaseService(); //<-- Unbinds service 
     } 
    } 
    super.onDestroy(); 
} 
+0

** onDestroy()**と同義ではありません** unbindService()**。あなたは、始まったサービスと束縛されたサービスを一緒にしたいと思うかもしれません。これを読んでください:developer.android.com/guide/components/bound-services.html - 'サービスの開始とバインドを許可すると、サービスが開始されると、システムはすべてのクライアントアンバインドする。代わりに、stopSelf()またはstopService()を呼び出して明示的にサービスを停止する必要があります。 ' –

答えて

1

私はいつもonUnbind()メソッドをオーバーライド考え、活動が明示的にunbindService()メソッドを呼び出した場合にのみ呼び出されます。

しかし、最近のアプリセレクタをスワップしてアプリがクラッシュしたり強制終了しても、そのアプリが呼び出されます。私はそうonunbind使うのではなくonTaskRemovedすることを決定した

注:私はXamarinを使用しています、と私は、これはJavaのAndroid上で動作するように保証することはできません

+0

私の以前のコメントを残念に思います。この答えのテキストは答えのようには読まれませんが、本当にその質問に答えます。 –

関連する問題