android - 如何实现一个 "watchdog"服务

标签 android

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

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

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

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

我知道没有 100% 的解决方案。但!我注意到 Yahoo Weather 应用程序能够在完全独立的应用程序行中运行他们称之为“看门狗”的东西。关闭主要的 Yahoo 天气应用程序并不会关闭 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

最佳答案

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


背景

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

另一个类似的技巧是向 AlarmManager 注册以广播一个周期性的 Intent ,该 Intent 将重启您的应用程序/服务。

在这个过程中(我认为是 HoneyComb),Android 改变了他们的安全模型。应用程序可能会被系统标记为“不良”,直到用户手动启动它们才会再次启动它们。如果一个应用经常崩溃,或者用户强行关闭它,它就会变得“糟糕”。

这包括接收到 ON_BOOT_COMPLETED Intent 的应用程序 - 如果它们被标记为这样的错误,它们将不会重新启动。

所以“看门狗”不再像以前那样有用(有些人可能会说烦人,或者耗电)。对于偶尔崩溃的应用程序,它可能仍然有用


远程进程

我最初推荐远程进程作为实现此目的的最佳方式。然后我看到你已经这样做了,而且它有效。

不幸的是,如果它已被手动停止,这仍然无法重新启动该服务。雅虎的 WeatherServiceWatchdog 似乎也无法重启主要的天气服务。

关于android - 如何实现一个 "watchdog"服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23816319/

相关文章:

java - Android - 无法从 ListView 中调用不同的电话号码但显示不同的电话号码

java - 红外遥控应用程序

java - 从哪里获取 BitmapFont 并将其放置在哪里?

android - 如何显示选择输入法对话框

java - Android Microsoft dynamics CRM adal4j 登录问题

java - 类 Event<T> 中的构造函数 Event 不能应用于给定类型;找不到符号方法 getTitle()

java - 是否可以使用 Android 打开多个蓝牙套接字到单个设备?

android - 如何取消应用程序与 Admob 的关联

android - Android Kitkat 4.4 的 Java Card Applet 和基于主机的卡模拟

android - 是关于增强现实还是相机预览?