APP保活
前言
app保活,在Android中是一种流氓行为,一方面无端浪费用户手机电量,另一方面给用户一种很困惑的感觉,影响用户体验还有可能导致整个Android系统流畅性变差,所以Google官方一种不推荐该功能,也一直在阻止这方面功能在Android系统上运行,作为一个Android开发人员,应该极力地址这种无耻的行为!!!
保活的方式:
一、白色保活:
- 给用户明确的提示,我这个应用的进程优先级比较高,不容易被杀死,请你也不要手动杀死!
|– 开启前台服务进程
二、灰色保活(目前保活的主流做法,比如qq、微信 – 当然他们不止这一种保活手段)
也是利用前台服务进程的方式,来提高进程的优先级,但是不会在通知栏给用户明确的提示
|– 利用系统的漏洞,开启前台服务进程,不会有通知!① API < 18,启动前台service时直接传入new=”“>
② API >= 18,同时启动两个id相同的前台Service,然后再将后启动的Service做stop处理;
—–查看开启的服务是否为前台进程 “dumpsys activity services 应用包名”public class GrayService extends Service { private final static int GRAY_SERVICE_ID = 1001; @Override public int onStartCommand(Intent intent, int flags, int startId) { if (Build.VERSION.SDK_INT < 18) { //API < 18 startForeground(GRAY_SERVICE_ID, new Notification()); } else { Intent innerIntent = new Intent(this, GrayInnerService.class); startService(innerIntent); startForeground(GRAY_SERVICE_ID, new Notification()); } return super.onStartCommand(intent, flags, startId); } ... ... /** * 给 API >= 18 的平台上用的灰色保活手段 */ public static class GrayInnerService extends Service { @Override public int onStartCommand(Intent intent, int flags, int startId) { startForeground(GRAY_SERVICE_ID, new Notification()); stopForeground(true); stopSelf(); return super.onStartCommand(intent, flags, startId); } ... } }
三、黑色保活(耍流氓)
系统广播保活:比如开机(4.0以上系统已经屏蔽)、拍照(5.0以上系统已经屏蔽)、网络切换等 – Google一直在屏蔽的路上,我们一直在反屏蔽!
多进程互相守护:
|– 将Service在另一个进程中启动(配置process) 监听应用是否还存活,没有存活就启动 (监听的方式有轮询、socket心跳等)
|– 利用c语言,fork一个linux进程,监听
|– sdk唤醒,比如集成了腾讯的sdk,那sdk里面有一段程序,会去检测腾讯自家的应用是否还存活,没有存活就激活|-- 更可耻的 多家企业联合,互相激活,比如百度系的激活淘宝 淘宝系的激活百度等等
四、白名单(超级流氓)
- 以上所有的方式,都无法做到绝对的保活,那怎么做到绝对保活呢?
|– 告诉底层系统不要杀自己,即使被认为的杀死了,底层系统也会帮忙再次启动;告诉三方的卫士软件,不要主动去杀死自己,怎么做到呢?
|– 白名单 白名单 白名单(只有有实力的大企业能够做到)