如何实施“看门狗”服务

马特·M

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

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

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

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

我了解没有解决方案是100%。但!我注意到Yahoo Weather应用程序能够在完全独立的应用程序行中运行他们称为“看门狗”的东西。杀死主要的Yahoo Weather应用程序不会杀死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以广播会重新启动您的应用/服务的定期意图。

在此过程中的某个地方(我认为是HoneyComb),Android更改了其安全模型。系统可能会将应用程序标记为“不良”,除非用户手动启动它们,否则它们不会再次启动它们。如果应用崩溃次数过多或用户强行将其关闭,则该应用将变为“不良”状态。

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

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


远程过程

我最初建议使用远程过程作为完成此任务的最佳方法。然后,我看到您已经完成了此操作,并且可以正常工作。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何启用看门狗?

来自分类Dev

如何遍历Drupal的看门狗表?

来自分类Dev

我如何使用看门狗挂钩?

来自分类Dev

我如何避免看门狗的distinct()?

来自分类Dev

为重要任务实施看门狗

来自分类Dev

在sysd下为docker服务实现看门狗

来自分类Dev

什么是模拟看门狗?

来自分类Dev

看门狗忽略模式

来自分类Dev

什么是模拟看门狗?

来自分类Dev

什么是DPC看门狗?

来自分类Dev

如何禁用然后重新启用 Arduino 的看门狗中断?

来自分类Dev

如何选择合适的看门狗定时器值

来自分类Dev

CPU异常使用-Okio看门狗

来自分类Dev

看门狗!@Sync错误指示什么?

来自分类Dev

Shell脚本充当看门狗

来自分类Dev

Python中的Beaglebone Black看门狗

来自分类Dev

看门狗作为后台线程-Python

来自分类Dev

互联网连接看门狗

来自分类Dev

从minidump诊断DPC看门狗违规

来自分类Dev

我是否拥有看门狗?

来自分类Dev

Haswell上的NMI看门狗

来自分类Dev

为什么看门狗不踢?

来自分类Dev

Cron看门狗的python脚本

来自分类Dev

内存看门狗,适合饥饿的应用

来自分类Dev

看门狗上的systemd重新启动服务不会终止先前挂起的实例

来自分类Dev

硬件看门狗和软件看门狗有什么区别?

来自分类Dev

如何解决OS X中CUDA代码对GPU看门狗定时器的限制

来自分类Dev

如何在Delphi中实现看门狗定时器?

来自分类Dev

我如何只选择drupal看门狗数据库表中变量的类型?