系统端实现看门狗功能
前言:系统端实现看门狗功能
文章目录
- 需求
- 实现方案介绍
- 一、修改文件
- 二、实现思路
- 三、实现方案
-
- binder机制定义接口 - IPackageManager.aidl
- 客户端实现 - IPackageManagerBase- 使用
- 服务端 - PackageManagerService 具体业务实现
-
- 导入头文件
- 声明Handler定时-缓存-集合列表存储投喂数据
- Handler Loop 起来
- 看门狗业务逻辑处理
- PackageManager 对外释放接口
- ApplicationPackageManager 对外释放接口实现类,实现具体业务
- 四、坑点
-
- PackageManager 类中创建抽象方法失败
- 输出jar 给上层应用调用
- 新增aidl接口方法需要同步api
- 五、应用端调用系统接口
-
- 添加监控-喂狗
- 删除指定的监控程序
- 停止看门狗-停止所有监控
- 获取当前监控的程序
- 总结
需求
各种行业定制软件,需要看门狗功能,按照系统端看门狗机制,不断喂狗,如果一段时间内发现没有喂狗了则根据喂狗类型进行对应的重启应用、服务 等相关机制的处理。
具体需求如下:
- 以看门狗形式,喂狗机制,一分钟之内如果未收到投喂信息,则 根据喂狗类型系统重新拉起程序、执行某个程序某个业务
- 能够实现一个看门狗,监听多个应用
- 能够让看门狗停止其中一个监听,不让监听自己了
- 能够让看门狗停止所有监听
- 获取当前看门狗的监听的程序,可以理解为包名
客户大多数看门狗机制是为了防止app 挂了,保活机制。
实现方案介绍
- 直接用系统看门狗机制实现:但是看门狗太复杂了,监听ANR、crash ,定制监听逻辑比较麻烦,不推荐。
- 在一个服务里面或者自己写一个服务:循环检测+判断当前进程是否存在,来处理某个app 的业务逻辑
- 在一个服务里面或者自己写一个服务:循环检测,不断监听用户是否投喂,利用缓存时间来判断app 是否正常工作。如果在一个周期内发现监听的程序不投喂了,那么就启动业务逻辑对app 进行业务处理。
一、修改文件
/frameworks/base