2012-06-24 17 views
6

Tengo una clase IntentService que se puede iniciar desde varios lugares en una aplicación compleja - Actividades, Hilos de fondo, otros Servicios. Me gustaría mantener un contador de cuántas veces se invocó el servicio. Utilizo una variable int privada dentro de mi clase IntentService para hacer un seguimiento de eso, lo incremente desde mi método onStartCommand(...).¿Es seguro el hilo de método onStartCommand (..) de IntentService?

Me acabo de ocurrir, ya que el método onStartCommand (...) se puede llamar desde varios subprocesos asíncronos, que esto podría no ser una solución segura para subprocesos. Entonces, la pregunta es, ¿debo envolver el acceso a esta variable de contador en un bloque sincronizado, o la implementación de IntentService de onStartCommand (...) se ocupa de esto por mí?

Como nota, sé que podría incrementar de forma segura la variable desde onHandleIntent(...), pero necesitaría un recuento en las solicitudes reales y no en las intenciones ejecutadas.

Respuesta

14

Me acabo de ocurrir, ya que el método onStartCommand (...) se puede invocar desde varios subprocesos asíncronos, que esto podría no ser una solución segura para subprocesos.

onStartCommand() siempre se invoca el subproceso principal de la aplicación en cualquier servicio. No se puede llamar con onStartCommand() en dos hilos simultáneamente.

+0

Aprender cosas nuevas todos los días. ¡Gracias! –

+0

¿No es seguro para subprocesos? – digitizedx

+0

@digitizedx: ¿** qué ** no es seguro para subprocesos? 'onStartCommand()' es, en la medida en que solo se invoca en el hilo principal de la aplicación. – CommonsWare

Cuestiones relacionadas