Verwenden Sie 0 oder BIND_AUTO_CREATE für BindService-Flag

8

Mit Bezug auf bindService (Intent-Dienst, ServiceConnection-Conn, int-Flags)

Darf ich wissen, wann wir 0 für flags verwenden sollen, und wann sollten wir BIND_AUTO_CREATE für flags verwenden? Die Dokumentation erklärt nicht, was 0 für Flags bedeutet.

Beispiel für die Verwendung von 0 als flags

%Vor%

Beispiel für die Verwendung von BIND_AUTO_CREATE als flags

%Vor%     
Cheok Yan Cheng 07.02.2013, 07:54
quelle

3 Antworten

10

Für die Methode bindService(Intent, ServiceConnection, flag) , wenn flag= Context.BIND_AUTO_CREATE verwendet wird, wird die service gebunden und der Dienst gestartet.  Wenn jedoch "0" verwendet wird, gibt die Methode true zurück und startet den Dienst erst, wenn ein Aufruf wie startService(Intent) zum Starten von service erfolgt.  Eine der allgemeinen Verwendungszwecke von "0" ist für den Fall, dass eine Aktivität eine Verbindung zu einem lokalen Dienst herstellt, wenn dieser Dienst ausgeführt wird, andernfalls können Sie den Dienst starten.

    
Sourab Sharma 07.02.2013, 08:27
quelle
9

Verwenden Sie% semantisch BIND_AUTO_CREATE , wenn Sie an einen Service binden, dessen Gültigkeitsdauer nur so lange gültig ist, wie Clients an ihn gebunden sind. Das ist, weil die Minute alle Clients ungebunden haben, wird es gehen.

Verwenden Sie nicht BIND_AUTO_CREATE - oder vielleicht sollte ich anders formulieren: Es macht keinen Sinn, BIND_AUTO_CREATE zu verwenden, wenn Sie nur vorübergehend an einen Dienst binden, um ihn abzufragen oder zu kontrollieren, und das ist vernünftig Der Dienst würde weiterleben, wenn du fertig bist. In diesen Fällen ist das Herstellen einer Verbindung bindend, und der Lebenszyklus des Dienstes sollte mit startService() und stopService() (oder in einigen Fällen mit stopSelf() ) verwaltet werden.

Ein häufig genanntes Beispiel für den letzteren Fall wird von Google in den Dokumenten zu gebundenen Diensten :

  

"... Zum Beispiel könnte es ein Musik-Player nützlich sein, seinen Dienst unbegrenzt laufen zu lassen und auch eine Verbindung herzustellen. Auf diese Weise kann eine Aktivität den Dienst starten, um Musik abzuspielen, und die Musik spielt weiter, selbst wenn Der Benutzer verlässt die Anwendung. Wenn der Benutzer dann zur Anwendung zurückkehrt, kann die Aktivität an den Dienst gebunden werden, um die Kontrolle über die Wiedergabe wiederzuerlangen. "

Insgesamt würde ich sagen, dass die Verwendung der Flagge wirklich zwei sehr unterschiedliche Arten von Anwendungsfällen unterscheidet, anstatt genau abgestimmte Versionen derselben Sache.

    
d4vidi 13.08.2014 15:34
quelle
0

Antwort von Sourab Sharma ist falsch, weil:

1.As Saxman kommentiert, BIND_AUTO_CREATE wird nur den Service erstellen, wenn es nicht bereits ausgeführt wird. Sie sollten startService () aufrufen, um einen Dienst zu starten.

2. bindService() gibt true zurück, wenn der Service erfolgreich an die Komponente gebunden wurde und andernfalls false.

    
CopsOnRoad 04.02.2018 11:57
quelle

Tags und Links