¿Cómo forzar el reinicio de un servicio?

Tengo un servicio en segundo plano que a veces es asesinado por el sistema operativo cuando se está quedando sin memoria.

  1. ¿Cómo simular este comportamiento para poder depurarlo?

La guía de desarrollo simplemente dice “si su servicio se inicia, entonces debe diseñarlo para gestionar correctamente los reinicios por parte del sistema. Si el sistema cancela su servicio, lo reinicia tan pronto como los recursos vuelvan a estar disponibles”.

  1. ¿Cuál es la secuencia de llamadas desde cuándo es asesinado hasta cuándo termina de reiniciarse?

En una pregunta secundaria (relacionada), ¿qué ocurre con una AsyncTask que se ejecuta activamente y que se inicia en el servicio cuando el sistema operativo mata al servicio, es decir, sin que se llame a service.onDestroy? ¿Sigue funcionando o se corta de forma silenciosa junto con el servicio?

Si se trata de un Servicio local (el predeterminado), a diferencia de un Servicio remoto, se está ejecutando en el mismo proceso que su aplicación. Esto significa que puedes simular matarlo simplemente matando el proceso de tu aplicación. Puede hacerlo usando ddms, por ejemplo, en eclipse o desde la línea de comandos, o incluso desde su teléfono (configuración -> aplicaciones).