Android服务因“不再需要”而死亡 - 如何重启?

时间:2010-07-21 07:48:33

标签: android service

我们有一项服务可以持续收集手机上的传感器数据。该服务应“永久”运行,例如只要用户想要,而不是被系统杀死。

为了澄清,这项服务旨在将应用程序在市场上发布给公众,它是为科学研究而编写的。因此,运行该应用程序的人充分意识到他们的电池将比平时更快地吸空,这没问题。

无论如何,我的问题是服务在运行一段时间后会被杀死。有时一小时后,有时仅在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中看起来很相似?

如果您需要更多信息,请询问,我会尽力提供: - )

2 个答案:

答案 0 :(得分:13)

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

答案 1 :(得分:6)