如何实施"看门狗"服务

时间:2014-05-22 20:18:30

标签: android

我正在尝试实现大致如下的服务关系:

{ACTIVITY} -> {SERVICE1} -> {SERVICE2}

ACTIVITY启动SERVICE1,然后启动SERVICE2。 SERVICE2能够自行关闭是非常重要的。如果SERVICE1崩溃,SERVICE2应该有机会干净地关闭自己。我已经使用SERVICE2的远程进程实现了这一点,因此如果SERVICE1崩溃,它可以自行关闭。

棘手的部分是用户是否通过应用程序管理器执行强制关闭。

我知道没有解决方案是100%。但!我注意到Yahoo Weather应用程序可以在一个完全独立的应用程序行中运行他们称之为“Watchdog”的东西。杀死主要的雅虎天气应用程序并没有杀死Watchdog应用程序。这是什么味道?我怎么能复制类似的东西呢?

雅虎应用程序的图片:

https://dl.dropboxusercontent.com/u/2193687/device-2014-05-22-151216.png https://dl.dropboxusercontent.com/u/2193687/device-2014-05-22-151236.png

1 个答案:

答案 0 :(得分:3)

(将评论中的对话转换为答案)


背景

通常是"看门狗服务"指的是在单独的进程中运行的服务,如果它崩溃,或者用户强制关闭它,将尝试重新启动其他目标服务。

另一个类似的技巧是注册AlarmManager以广播一个会重启您的应用/服务的定期意图。

一路上(我认为是HoneyComb),Android改变了他们的安全模式。应用可以标记为"不良"系统,直到用户手动启动它们才会再次启动它们。一个应用程序变得糟糕"如果它经常崩溃,或者用户强行关闭它。

这包括接收ON_BOOT_COMPLETED意图的应用 - 如果它们被标记为不良,则不会重新启动。

所以"看门狗"不再像过去那样有用(有些人可能会说是讨厌或电池耗尽)。对于偶尔崩溃的应用程序,它可能仍然有用


远程处理

我最初建议使用远程进程作为完成此任务的最佳方法。然后我看到你已经完成了这件事,而且它有效。

不幸的是,如果已经手动停止了服务,它仍然无法重启服务。雅虎的WeatherServiceWatchdog似乎无法重启主要的气象服务。