Utilice 0 o BIND_AUTO_CREATE para el indicador de bindService
Haciendo referencia a bindService (servicio Intent, ServiceConnection conn, int flags)
¿Puedo saber, cuándo debemos usar 0 para flags
, y cuándo deberíamos usar BIND_AUTO_CREATE
para flags
? La documentación no explica cuál es el significado de 0 para banderas.
Ejemplo de uso de 0 como flags
// Start auto complete service. autoCompleteServiceIntent = new Intent(AutoCompleteService.class.getName()); startService(autoCompleteServiceIntent); bindService(autoCompleteServiceIntent, serviceConnection, 0);
Ejemplo para utilizar BIND_AUTO_CREATE
como flags
mContext.bindService(new Intent("com.android.vending.billing.InAppBillingService.BIND"), mServiceConn, Context.BIND_AUTO_CREATE);
Para el método bindService(Intent, ServiceConnection, flag)
si se usa flag= Context.BIND_AUTO_CREATE
se enlaza el service
e inicia el servicio, pero si se usa "0"
, el método devolverá true y no iniciará el servicio hasta que una llamada como startService(Intent)
se hace para iniciar el service
. Uno de los usos comunes de "0"
es en el caso de que una actividad se conecte a un servicio local si ese servicio está en ejecución, de lo contrario puede iniciar el servicio.
Semánticamente, utilice BIND_AUTO_CREATE
si está vinculado a un servicio cuya vida útil sólo es válida mientras haya clientes vinculados a él. Eso es porque el minuto todos los clientes tienen unbound de él, bajará.
No utilice BIND_AUTO_CREATE
– o tal vez debo reformular: no hay ningún punto en el uso de BIND_AUTO_CREATE
, si realmente estás vinculado temporalmente a un servicio para consultarlo o controlarlo, y es razonable que este servicio se BIND_AUTO_CREATE
después de que ' Re hecho Para esos casos, la vinculación es para establecer una conexión y el ciclo de vida del servicio debe administrarse utilizando startService()
y stopService()
(o stopSelf()
en algunos casos).
Un ejemplo comúnmente mencionado de este último caso está claramente descrito por Google en los documentos sobre servicios enlazados :
"… Por ejemplo, un reproductor de música puede ser útil para permitir que su servicio se ejecute indefinidamente y también para proporcionar un enlace.Por ejemplo, una actividad puede iniciar el servicio para reproducir música y la música continúa jugando incluso si el usuario deja Luego, cuando el usuario vuelve a la aplicación, la actividad puede enlazar al servicio para recuperar el control de la reproducción. "
En general, yo diría que el uso de la bandera realmente distingue dos tipos muy diferentes de casos de uso, en lugar de versiones afinadas de la misma cosa.