2012-02-07 19 views
5

Al usar START_STICKY, si mi administrador/administrador de tareas interrumpe o cancela mi servicio, se reinicia automáticamente. Veo que hay una lista de servicios que se reinicia pero en un orden diferente. Quiero priorizar este reinicio del servicio para que comience antes colocándolo al principio de la cola.Priorizar la programación de reinicio del servicio de Android accidentado

En general, demorar entre 15 segundos y 45 segundos para reiniciar el servicio. ¿Hay alguna manera de priorizar o comenzar este servicio antes que el otro?

Respuesta

0

¿Es su servicio de larga ejecución? Si es así, trate de deshacerse de él y solo comience cuando sea necesario. Los servicios de Android no están diseñados para ejecutarse como daemon, sino para funcionar como trabajadores vivos de corta duración en segundo plano cuando no se necesita interacción e interfaz del usuario.

La mayoría de los servicios "Solo estoy sentado" pueden escuchar los intentos de transmisión y ser un buen ciudadano de esta manera.

Otra cosa: si su servicio ya es de ejecución corta y el asesino de tareas está activo, es fácil: es el problema de los usuarios y no es su culpa. El sistema no necesita asesinos de tareas y no debes ocuparte de ellos. El usuario debe saber que no es saludable usarlos.

+0

La mía es la "Otra cosa". Creo que debería agregar un mensaje para agregar mi aplicación a la lista de ignorar del Administrador de tareas. – dcanh121

0

Supongo que esta solución está un poco sucia, pero podría usar un nuevo servicio que comience con START_STICKY y establecer todos los demás servicios en START_NOT_STICKY.

Puede utilizar el nuevo servicio para iniciar todos los demás servicios (aunque esto no es necesariamente necesario). En realidad, es una implementación fácil, ya que puede pasar toda la intención al servicio que se debe iniciar.

Luego, podría agregar una Transmisión en todos los servicios OnDestroy() para indicarle al nuevo servicio, que uno de los anteriores fue destruido por el sistema. También puede pasar el antiguo intento de inicio a través del OnDestroy(), por lo que se reinicia.

En caso de que se mate el nuevo servicio, puede verificar después de reiniciar si también se canceló alguno de los otros servicios y luego priorizar el reinicio.

Cuestiones relacionadas