Ist es in Ordnung, Service.startService () in Service.onBind () aufzurufen?

8

Ich habe einen Dienst, den ich sicherstellen möchte, dass er nicht aufhört (), wenn keine Aktivitäten mehr daran gebunden sind.

Ich verstehe, dass startService () verwendet wird, um dies zu erreichen, aber ist es in Ordnung, dies innerhalb der onBind () - Methode des Service aufzurufen?

Wenn ich es von der Aktivität ausrufe, erscheint es mir wie ein Hack, denn der Dienst weiß am besten, ob er nach onOnbind () hängen bleiben will.

Die Aktivitäten geben den aktuellen Status des Dienstes an und stellen eine gewisse Kontrolle bereit, daher scheint bindService () hier die geeignete Methode zu sein.

    
Mark 10.02.2013, 18:05
quelle

2 Antworten

7

Es sollte in Ordnung sein, startService() innerhalb von onBind() aufzurufen. Wenn Sie eine Logik in onBind() haben, die feststellen kann, dass der Service aufrecht erhalten werden muss, selbst wenn der Client nicht gebunden ist, dann scheint dies der logische Ort dafür zu sein.

Ich stimme der Antwort nicht zu, die behauptet, dass sie nicht empfohlen wird. Die von Ihnen beschriebene Architektur nutzt effektiv die Kapselung. Clients möchten nur binden / nicht binden und sie sollten nicht wissen müssen, wie der Dienst (intern) implementiert ist. Der Dienst sollte seinen eigenen Lebenszyklus steuern.

    
David Wasser 11.02.2013 14:31
quelle
0

Der Aufruf von startService() von onBind() wird nicht empfohlen. onBind() ist für die Verbindung mit Clients gedacht, Sie sollten das Verhalten nicht ändern.

Bevor ein Client eine Verbindung herstellen möchte, rufen Sie startService() auf, wenn der Dienst bereits ausgeführt wird, hat er keine Auswirkungen. Das Clientobjekt kann dann binden. Der Dienst wird weiterhin ausgeführt, wenn die Clients die Verbindung trennen. Wenn der Dienst weiß, wenn er nicht in der Nähe ist, kann er stopSelf() selbst aufrufen und beenden.

    
S.D. 10.02.2013 18:20
quelle

Tags und Links