2009-06-09 31 views
23

Ich bin mit Android-Diensten zu tun, und ich habe festgestellt, dass ziemlich vorhersehbar aufgerufen wird, wenn ich an einen Dienst binden.Wann wird ServiceConnection.onServiceDisconnected() aufgerufen?

Allerdings scheint meine onServiceDisconnected() Methode nie aufgerufen werden, auch nachdem die VM stirbt.

Ich habe Debug-Nachrichten auf dem Dienst protokolliert und zeige, dass alle Threads heruntergefahren wurden usw. Ich weiß, dass Dienste als Prozesse implementiert sind; Gibt es Threads, von denen ich nicht weiß, dass sie den Prozess verhindern?

Antwort

24

Es passiert nach Remote-Service-Crash. Wenn also ein Dienst, der in einem anderen Prozess als Ihr Client ausgeführt wird, bei einer Ausnahme ausfällt, verlieren Sie die Verbindung und rufen den Rückruf ab.

+2

Ist es nur auf Crash? Ich würde erwarten, dass es aufgerufen wird, wenn ich 'unbindService()' rufe und der Dienst beendet wird, weil es keine weiteren Clients gibt. – sehugg

+3

nach der Dokumentation passiert es nur auf "unerwartete Service-Entbindungen", also ja, es ist nur bei einem Absturz, und keine auf unbindService() – reflog

+2

Also, wie können Sie wissen, ob Sie tatsächlich an den Dienst binden können? Oder besser, wie wirst du wiedergeboren? Uing eine neue ServiceConnection? – Snicolas

Verwandte Themen