1.1.1.实现自己的广播接收器,在 onReceive()方法中实现要处理的逻辑
实现 Android 的自启动与一般的广播接收没有很大区别,但是有一些要注意的地方:
c.新***完成,从未打开和运行过的应用
通过了解 BOOT_COMPLETED 广播发送的时机和原理,我们大概可以分析出禁止自启动的几种方法:
通过 forceStopPackage 去禁用,不仅会停用 app 的组件,也会停止他的定时器等,同时需要 system 权限和系统签名。
但是该方法清理的进程等级不是太高,killProcess(pid)是一种能 kill更高优先级的方法,但是该方法并不能保证进程被 kill,因为该方法只是发出 kill process 的信号,具体是否要 kill 是由系统决定的,一般来说,可以被杀死的进程如下:
查找权限的方法有很多,这里只提供一种,即通过 packagemnager 来实现:
综上,市场上一般的自启动管理 app,大多是通过获取 root 权限后使用 pm命令来禁用包含 Boot_Completed 的接收器来实现的,还有一些则是通过监控后台进程,轮询查找黑名单中的进程来 kill 掉相应的自启动程序,不仅包括开机自启动,还可以监控后台自启动,不过该方法的最大问题就是增加了系统消耗,包括内存消耗和电量消耗。另外还有一些第三方的 ROM 也带有权限管理工具,例如小米的权限管理系统,是在解析接收器的权限的时候,会将所有接收器的优先级减 1,这样其他应用的优先级将永远低于其系统 app 的优先级。