Ich arbeite an einer Android-App, die an einen Android-Dienst bindet.Android-Dienst bei App-Absturz lösen oder beenden
Das Problem ist, dass dieser Android-Dienst für eine Bluetooth-Verbindung mit einem anderen Gerät verantwortlich ist.
Momentan stellt mein Dienst eine DisconnectBluetooth()
Methode zur Verfügung, die die Bluetooth Verbindung beendet.
Was ich tue, ist zu nennen, dass DisconnectBluetooth
Methode unbindService
durch einen Aufruf gefolgt, in meiner onDestroy
Methode, so dass, wenn die App stoppt, wird die Bluetooth-Verbindung geschlossen werden, und der Dienst wird ungebundenes sein.
Die Sache ist die, dass, wenn meine app Abstürze, oder manchmal, wenn ich es zu Ausfahrt zwingen indem sie sie in den App Selector swipping, die onDestroy
Methode nicht aufgerufen werden. Die App wird dann beendet, aber der Dienst ist noch am Leben, und so ist die Bluetooth-Verbindung auch noch am Leben.
Was kann ich tun, um sicher zu sein, die Bluetooth-Verbindung zu schließen, und wenn möglich, die Verbindung zu lösen?
@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();
}
** onDestroy() ** ist nicht gleichbedeutend mit ** unbindService() **. Klingt so, als ob Sie einen gestarteten Service und einen gebundenen Service wünschen. Lesen Sie hierzu: developer.android.com/guide/components/bound-services.html - Wenn Sie zulassen, dass Ihr Dienst gestartet und gebunden wird, zerstört das System den Dienst nicht, wenn der Dienst gestartet wurde, wenn alle Clients gestartet wurden lösen. Stattdessen müssen Sie den Dienst explizit stoppen, indem Sie stopSelf() oder stopService() aufrufen. ' –