with stopservice intent implement how create android service

stopservice - java android service



Android-Service eliminado con "ya no quiero"-¿cómo reiniciarlo? (2)

Tenemos un servicio que recopila continuamente datos de sensores en el teléfono. Este servicio debe ejecutarse "para siempre", por ejemplo, siempre que el usuario lo desee, y no ser eliminado por el sistema.

Para aclarar, este servicio no está destinado a que una aplicación se publique en el mercado al público en general, está escrito para un estudio científico. Así que las personas que ejecutan la aplicación son plenamente conscientes de que su batería se descargará más rápido de lo normal, esto no es un problema.

De todos modos, mi problema es que el servicio muere después de un tiempo de ejecución. A veces, después de una hora, a veces solo después de 7 o 10 horas.

Las entradas de registro cuando el servicio muere se parecen a esto. Simplemente dice " ya no quiero ", a veces sin siquiera llamar a Destroy (), por lo que puedo decir.

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()

O más tarde (después de que lo reinicié 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}

A menudo veo que otros servicios se eliminan con " ya no quiero " y luego se reinician inmediatamente con " Programación de reinicio del servicio bloqueado ". Por ejemplo aquí con 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}

Los registros no muestran ningún registro de poca memoria. La prueba se realiza en (varios) Nexus One con 2.2 (Froyo FRF91).

¿Hay alguna manera de lograr este comportamiento con mi aplicación? ¿Reinicio automático después de ser asesinado?

¿O esto es algo totalmente diferente que se ve similar en Logcat?

Si necesita más información, solo pregunte y trataré de proporcionarla :-)


¿Cómo se inicia el servicio? ¿Has probado startForeground() ? Eso no es una garantía absoluta, por supuesto, pero al menos debería alargar la vida útil.


Intente anular el método onCreate () de su servicio. Si el servicio se cancela y luego se reinicia, se llama a onCreate (), pero no a OnStart (). Por lo tanto, puede, por ejemplo, agregar una llamada a onStart () desde onCreate para que se comporte como RunKeeperService.