Android服务杀死“不再需要” – 如何重新启动?

我们有一个服务,不断收集电话上的传感器数据。 这个服务应该“永远”运行,例如只要用户想要,而不是被系统所杀。

为了澄清,这项服务并不是要将应用程序在市场上公开发布,而是为科学研究而编写的。 所以运行这个应用程序的人完全知道他们的电池会比平时更快地吸空,这是没问题的。

无论如何,我的问题是,服务在运行一段时间后会死亡。 有时一个小时之后,有时候只有7个小时之后。

服务被杀的日志条目看起来像这样。 它只是说“ 不再需要 ”,有时甚至没有调用onDestroy(),据我所知。

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

或更高版本(我手动重新启动后):

 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} 

我经常看到其他服务被“ 不再需要 ”杀死,然后立即重新启动“ 调度崩溃服务的重新启动 ”。 比如这里用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} 

日志显示没有低内存logging。 testing是在(几个)Nexus One 2.2(Froyo FRF91)上完成的。

有什么办法可以实现我的应用程序的这种行为? 被杀后自动重启?

或者这个东西完全不同,只是看起来类似于logcat?

如果你需要更多的信息,只要问一下,我会尽力提供:-)

Solutions Collecting From Web of "Android服务杀死“不再需要” – 如何重新启动?"

你如何开始服务? 你尝试过startForeground()吗? 这当然不是绝对的保证,但至less应该延长寿命。

尝试覆盖您的服务的onCreate()方法。 如果该服务被杀死,然后重新启动它onCreate()被调用,但不是onStart()。 所以你可以,例如,从onCreate添加对onStart()的调用,使其performance得像RunKeeperService。