我们有一项服务可以持续收集手机上的传感器数据。该服务应“永久”运行,例如只要用户想要,而不是被系统杀死。
为了澄清,这项服务不旨在将应用程序在市场上发布给公众,它是为科学研究而编写的。因此,运行该应用程序的人充分意识到他们的电池将比平时更快地吸空,这没问题。
无论如何,我的问题是服务在运行一段时间后会被杀死。有时一小时后,有时仅在7小时后10小时。
服务被杀死时的Log-Entries看起来像这样。它只是说“不再需要”,有时甚至没有调用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}
日志显示没有内存不足的记录。测试在(几个)Nexus One 2.2(Froyo FRF91)上完成。
有什么办法可以用我的应用程序实现这种行为吗?被杀后自动重启?
或者这个完全不同的东西在logcat中看起来很相似?
如果您需要更多信息,请询问,我会尽力提供: - )