进程保活方案

一.保活的两个方案

A.提供进程优先级,降低进程被杀死的概率。

B. 在进程被杀死后,进行拉活。

必须先了解一下进程优先级,提高进程的优先级,应用存活的概率越大。

进程的重要性,划分5级:

1. 前台进程(Foreground process)

2. 可见进程(Visible process)

3. 服务进程(Service process)

4. 后台进程(Background process)

5. 空进程(Empty process)

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

前台进程一般为拥有下面的这些特点:

A. 拥有用户正在交互的 Activity(已调用 onResume())

B. 拥有某个 Service,后者绑定到用户正在交互的 Activity

C. 拥有正在“前台”运行的 Service(服务已调用 startForeground())

D. 拥有正执行一个生命周期回调的 Service(onCreate()、onStart() 或 onDestroy())

E. 拥有正执行其 onReceive() 方法的 BroadcastReceiver

二.A方案:提供进程优先级

1.利用 Activity 提升权限

方案设计思想:监控手机锁屏解锁事件,在屏幕锁屏时启动1个像素的 Activity,在用户解锁时将 Activity 销毁掉。注意该 Activity 需设计成用户无感知。

2.Notification 提升权限

 方案设计思想:Android 中 Service 的优先级为4,通过 setForeground 接口可以将后台 Service 设置为前台 Service,使进程的优先级由4提升为2,从而使进程的优先级仅仅低于用户当前正在交互的进程,与可见进程优先级一致,使进程被杀死的概率大大降低。

三.B方案:进程死后拉活

1.利用系统广播拉活

方案设计思想:在发生特定系统事件时,系统会发出响应的广播,通过在 AndroidManifest 中“静态”注册对应的广播监听器,即可在发生响应事件时拉活。

2.利用第三方应用广播拉活

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

3.利用系统Service机制拉活

方案设计思想:将 Service 设置为 START_STICKY,利用系统机制在 Service 挂掉后自动拉活。

4. 利用Native进程拉活

方案设计思想:利用 Linux 中的 fork 机制创建 Native 进程,在 Native 进程中监控主进程的存活,当主进程挂掉后,在 Native 进程中立即对主进程进行拉活。

主要原理:在 Android 中所有进程和系统组件的生命周期受 ActivityManagerService 的统一管理。而且,通过 Linux 的 fork 机制创建的进程为纯 Linux 进程,其生命周期不受 Android 的管理。

5.利用 JobScheduler 机制拉活

方案设计思想:Android5.0 以后系统对 Native 进程等加强了管理,Native 拉活方式失效。系统在 Android5.0 以上版本提供了 JobScheduler 接口,系统会定时调用该进程以使应用进行一些逻辑操作。

6.利用账号同步机制拉活

方案设计思想:Android 系统的账号同步机制会定期同步账号进行,该方案目的在于利用同步机制进行进程的拉活。

四: 其他有效拉活方案

经研究发现还有其他一些系统拉活措施可以使用,但在使用时需要用户授权,用户感知比较强烈。

这些方案包括:

1. 利用系统通知管理权限进行拉活。

2. 利用辅助功能拉活,将应用加入厂商或管理软件白名单。

这些方案需要结合具体产品特性来搞。

上面所有解释这些方案都是考虑的无 Root 的情况。

其他还有一些技术之外的措施,比如说应用内 Push 通道的选择:

1. 国外版应用:接入 Google 的 GCM。

2. 国内版应用:根据终端不同,在小米手机(包括 MIUI)接入小米推送、华为手机接入华为推送;其他手机可以考虑接入腾讯信鸽或极光推送与小米推送做 A/B Test。

详细参考链接:http://geek.csdn.net/news/detail/95035

你可能感兴趣的:(进程保活方案)