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.
flags
BIND_AUTO_CREATE
als flags
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.
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.
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.
Tags und Links android