Serviço Android morto com "não quer mais" - como reiniciá-lo?
Temos um serviço que coleta continuamente os dados do sensor no telefone. Este serviço deve ser executado "para sempre", por exemplo. contanto que o usuário queira, e não seja morto pelo sistema.
Para esclarecimento, este serviço énão destinado a um aplicativo a ser lançado no mercado para o público em geral, ele foi escrito para um estudo científico. Portanto, as pessoas que executam o aplicativo estão plenamente conscientes de que a bateria será descarregada mais rapidamente do que o normal, isso não é problema.
Enfim, meu problema é que o serviço é morto após um tempo de execução. Às vezes depois de uma hora, às vezes apenas depois de 7 ou 10 horas.
As Entradas de Log quando o serviço é interrompido são assim. Apenas diz "não quero mais", às vezes sem nem ligar para Destroy (), pelo que sei.
07-20 17:07:11.593 I/ActivityManager( 85): No longer want my.project.datalogging (pid 23918): hidden #16
07-20 17:07:11.593 I/WindowManager( 85): WIN DEATH: Window{44c61570 my.project.datalogging/my.project.datalogging.DataLoggingApp paused=false}
07-20 17:07:11.603 I/BackgroundService(23925): onDestroy()
Ou mais tarde (depois que eu o reiniciei manualmente):
07-20 19:00:49.677 I/ActivityManager( 85): No longer want my.project.datalogging:BackgroundService (pid 24421): hidden #17
07-20 19:00:49.677 I/ActivityManager( 85): No longer want my.project.datalogging (pid 24415): hidden #18
07-20 19:00:49.807 85 10707 I WindowManager: WIN DEATH: Window{44f1ea58 my.project.datalogging/my.project.datalogging.DataLoggingApp paused=false}
Costumo ver outros serviços sendo mortos com "não quero mais"e, em seguida, reiniciado imediatamente com"Agendando o reinício do serviço com falha". Por exemplo, aqui com o runkeeper:
07-20 17:30:45.503 I/ActivityManager( 85): No longer want com.fitnesskeeper.runkeeper (pid 24090): hidden #16
07-20 17:30:45.603 W/ActivityManager( 85): Scheduling restart of crashed service com.fitnesskeeper.runkeeper/.services.RunKeeperService in 5000ms
07-20 17:33:52.989 I/ActivityManager( 85): Start proc com.fitnesskeeper.runkeeper for service com.fitnesskeeper.runkeeper/.services.RunKeeperService: pid=24292 uid=10099 gids={3003, 1015}
Os logs não mostram registro de pouca memória. O teste é realizado em (vários) Nexus One com 2.2 (Froyo FRF91).
Existe alguma maneira de conseguir esse comportamento com meu aplicativo? Reinicialização automática após ser morto?
Ou isso é algo totalmente diferente que apenas se parece com o logcat?
Se precisar de mais informações, basta perguntar e tentarei fornecê-las :-)