Android进程的保活方案

1.什么进程的保活
就是让你的软件不容易被杀死,一直存活,让后台服务提升至前台服务的
优先级,当你的内存不足的时候,试先从优先级底的应用开始回收。

2.Android优先级的划分
前台进程——可见进程——服务进程——后台进程——空进程

前台进程:
用户当前操作所必须的进程,通常在任意给定时间前台进程的为数不多,只有在内存不足以支持它们同时继续运行这万不得已的情况下,系统才会
终止它们。

可见进程:
没有任何前台组件,但仍会影响用户在屏幕上所见内容的进程。可见进程被视为是极其重要的进程,除非为了维持所有前台进程同时运行而必须停止,否则系统不会终止这些进程。

服务进程:
尽管服务进程与用户所见内容没有直接关联,但是它们通常在执行一些用户关系的操作,例如在后台播放音乐,从网络下载数据。除非内存不足以维持所有的前台进程和可见进程同时运行,否则系统会让服务进程保持运行的状态。

后台进程:
后台进程对用户体验没有直接的影响,系统可能随时终止它们,以回收内存供前台进程、可见进程、服务进程的使用。通常我们会有很多后台进程在运行,因此它们会保存在LRU列表中,以确保包含用户最近查看的Activiy的进程最后一个被终止,如果Activity正确实现了生命周期方法,并保存了其当前状态,则终止其进程不会对用户体验产生明显的影响,因为当用户导航回该Activity时,Activity会恢复其所有可见状态。

空进程:
保留这种进程的唯一目的时用作缓存,以缩短下次其中运行组件所需的启动时间,使总体系统资源在进程缓存和底层内核之间保持平衡,系统往往会终止进程。

进程死后的拉活方案
1.利用系统广播拉活
在发生特定系统事件时,系统会发生响应的广播,在清单文件中静态注册广播。
缺点:广播接收器被管理软件,系统软件通过自启管理等功能会禁止接收广播,系统广播事件不可控,只能保证发生事件时的拉活,不能保证j进程死后立即拉活

2.利用第三方应用广播拉活
总的设计思想与接收系统广播类似,不同的是该方案为接收第三方Top应用广播。通过反编译第三方Top应用,如:手机qq,微信,支付宝,uc浏览器,以及友盟,信鸽,个推等sdk,找出它们外发的广播,在应用中进行监听这样当这些应用发出广播时,就会将我们的应用拉活。

3.利用系统的sevice机制拉活
将service设置为START_STICKY,利用系统机制在Service死后自动进行拉活
缺点:
Service在第一次被异常杀死后5秒之后自启,第二次被杀死10秒之后自启,第五次之后就不在被重启(进程被Root权限管理工具通过foreStop停止的无法被重启。

Android 进程保活手段主要分为黑白灰三种

黑色保活:不同的app进程,用广播相互唤醒(包括利用系统广播进行唤醒)

白色保活:启动前台的Service

灰色保活:利用系统的漏洞启动前台Service

黑色保活
所谓黑色保活,就是利用不同的app进程使用广播来进行相互的唤醒

Android进程的保活方案
场景:开机、网络切换、拍照、拍视频、利用系统产生的广播唤醒app

白色保活
白色保活,就是调用系统api启动一个前台的Service进程,这样会在系统的通知栏生成一个Notification,用来让用户知道有这样一个app在运行,就算当前的app退出后台,也会运行。
例如:
后台播放音乐、LBE、360安全卫士等。
Android进程的保活方案

灰色保活
这种保活手段是应用范围最广泛。它是利用系统的漏洞来启动一个前台的Service进程,与普通的启动方式区别在于,他不会在系统通知栏处出现一个Notification,但它如同运行着一个后台Service进程一样,这样的好处就是用户无法察觉到你运行着一个前台进程(因为看不到Notification),但你的优先级是高于普通后台进程的。所以可以一直运行在后台不被发现。

使用:
灰色保活并不代表着你的Service就永生不死了,只能说是提高了进程的优先级。如果你的app进程占用了大量的内存,按照回收的进程的策略,同样会干掉你的app。

如果你屏幕旁有人在,请谨慎往下观看!!!!!!!!!

如果你屏幕旁有人在,请谨慎往下观看!!!!!!!!!

如果你屏幕旁有人在,请谨慎往下观看!!!!!!!!!

福利
Android进程的保活方案