Meine App ist im Wesentlichen ein Hintergrunddienst, der gelegentlich einen NSD
Dienst (Bonjour
-Dienst) registrieren muss, um die Erkennung eines vom Hauptserver ausgeführten Socketservers zu ermöglichen Hintergrund-Service (aka von der App laufen).Android: Beenden eines Bonjour-Diensts, der ausgeführt wird, nachdem der Elternprozess abgebrochen wurde
Wenn ich die Android Bonjour Service doc richtig lese, ist dies, wie Sie die Bonjour
Service (abgekürzt für Prägnanz) starten:
mNsdManager = Context.getSystemService(Context.NSD_SERVICE);
mDiscoveryListener = new NsdManager.DiscoveryListener()
mNsdManager.discoverServices(
SERVICE_TYPE, NsdManager.PROTOCOL_DNS_SD, mDiscoveryListener);
... und das ist, wie man es stoppen:
mNsdManager.unregisterService(mRegistrationListener);
Hier ist der Teil, den ich nicht umschließen kann: wenn der Hauptdienst abrupt abbricht, läuft jeder zum Zeitpunkt des Absturzes registrierte Dienst Bonjour
weiter, obwohl er keinen Zweck mehr hat (der Socket-Server hilft Disco) ver steht nicht mehr herum).
Ich kann nicht Ereignis die Zombie Bonjour
Dienste bereinigen, wenn der Hauptdienst neu gestartet wird, weil die mRegistrationListener
der Dienst anfänglich registriert wurde mit ist auch nicht mehr um.
Ich vermute, dass ich den falschen Ansatz nehme: Wie stelle ich sicher, dass ich nicht ein Durcheinander von Zombies hinterlassen Bonjour
Dienstleistungen hinter dem Hauptdienst abgestürzt?
Danke, das Abfangen von nicht abgefangenen Exceptions mit 'UncaughtExceptionHandler' ist wahrscheinlich der Weg - obwohl ich auf eine Möglichkeit hoffte, den Bonjour-Dienst innerhalb des Hauptprozesses auszuführen (Ich finde es überraschend, dass die Android-Implementierung diese Option nicht zulässt) . Ich werde Ihre Antwort akzeptieren, wenn in den nächsten Tagen nichts Besseres zustande kommt. – Hugo
Ich stimme zu, Sie würden denken, es gibt einen richtigen Weg, damit umzugehen. Ich konnte keine Dokumentation finden, um die Theorie zu unterstützen, aber es kann vom Betriebssystem gehandhabt werden. Es kann sein, dass Google denkt, dass die Leute nicht denken, es überhaupt zu tun, also sollten sie automatisch damit umgehen! –
Danke @ Thril, mit dem 'UncaughtExceptionHandler', um die Registrierung für den Dienst für mich funktioniert (Ich habe erfolgreich getestet durch Absturz des Dienstes ein paar Sekunden nach der Registrierung des Dienstes mit einem Daemon-Timer in einem separaten Thread) – Hugo