进程保活

作者: A大心 | 来源:发表于2019-03-26 23:22 被阅读89次

保活手段

当前业界的Android进程保活手段主要分为 黑、白、灰 三种,其大致的实现思路如下:

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

白色保活:启动前台Service

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

黑色保活

所谓黑色保活,就是利用不同的app进程使用广播来进行相互唤醒。举个3个比较常见的场景:

场景1:开机,网络切换、拍照、拍视频时候,利用系统产生的广播唤醒app

场景2:接入第三方SDK也会唤醒相应的app进程,如微信sdk会唤醒微信,支付宝sdk会唤醒支付宝。由此发散开去,就会直接触发了下面的 场景3

场景3:假如你手机里装了支付宝、淘宝、天猫、UC等阿里系的app,那么你打开任意一个阿里系的app后,有可能就顺便把其他阿里系的app给唤醒了。(只是拿阿里打个比方,其实BAT系都差不多)

没错,我们的Android手机就是一步一步的被上面这些场景给拖卡机的。

针对场景1,估计Google已经开始意识到这些问题,所以在最新的Android N取消了 ACTION_NEW_PICTURE(拍照),ACTION_NEW_VIDEO(拍视频),CONNECTIVITY_ACTION(网络切换)等三种广播,无疑给了很多app沉重的打击。我猜他们的心情是下面这样的

而开机广播的话,记得有一些定制ROM的厂商早已经将其去掉。

针对场景2和场景3,因为调用SDK唤醒app进程属于正常行为,此处不讨论。但是在借助LBE分析app之间的唤醒路径的时候,发现了两个问题:

1.很多推送SDK也存在唤醒app的功能

2.app之间的唤醒路径真是多,且错综复杂

白色保活

白色保活手段非常简单,就是调用系统api启动一个前台的Service进程,这样会在系统的通知栏生成一个Notification,用来让用户知道有这样一个app在运行着,哪怕当前的app退到了后台。如下方的LBE和QQ音乐这样:

灰色保活

灰色保活,这种保活手段是应用范围最广泛。它是利用系统的漏洞来启动一个前台的Service进程,与普通的启动方式区别在于,它不会在系统通知栏处出现一个Notification,看起来就如同运行着一个后台Service进程一样。这样做带来的好处就是,用户无法察觉到你运行着一个前台进程(因为看不到Notification),但你的进程优先级又是高于普通后台进程的。那么如何利用系统的漏洞呢,大致的实现思路和代码如下:

思路一:API < 18,启动前台Service时直接传入new Notification();

思路二:API >= 18,同时启动两个id相同的前台Service,然后再将后启动的Service做stop处理;

进程的划分,如下图所示

分析上图可以得知,进程被分为5种,按照优先级从高到低:

1>:活动进程

优先级最高,指的是用户正在操作的程序,是前台进程,并且可以操作的;

2>:可见进程

次高优先级,指的是看的见,摸不着,不能直接操作的进程;

3>:服务进程

第三优先级,没有界面,一直运行在后台,优先级不高,当系统内存不足的时会被杀死,当内存再次充裕时会重新再次开启;

4>:后台进程

低优先级,用户按下home或者back键后,程序本身看不到了,但是其实还是在运行的程序;比如Activity调用 onPause()方法,系统可能随时终止它们,回收内存;

5>:空进程

优先级最低,某个进程不包含任何活跃的组件,该进程就会被置为空进程,完全没用,系统会第一个回收空进程。

4.2>:内存阈值

app在返回到后台时,系统并不会kill这个进程的,而是将其缓存起来。打开的进程越多,后台缓存的进程就越多,系统在内存不足时,会根据自身的一套进程回收机制来判断需要kill掉哪些进程,来腾出内存给有需要的app,这套杀死进程回收内存的机制就叫做 Low Memory Killer。怎样去规定内存不足,就是内存阈值,可以使用 cat /sys/module/lowmemorykiller/parameters/minfree 来查看手机的内存阈值;

应用白名单

有个一个叫应用白名单的东西,而QQ微信如果你把他从你手机的白名单里面去除那么一样可以把它杀死。那么他是什么时候被加进去的呢?当然是各大手机厂商规定的了。所以,任何想要保活的。除非你是5.0以下的手机,否则都活不了。

最后

最后给大家奉献一张图片

相关文章

  • 第十六周 进程保活

    话题:进程保活 这个问题时常在面试中被问到关键字:Android 进程保活招式大全 参考答案 1.进程保活方案 -...

  • 进程保活与拉活

    进程相关知识梳理 Activity 1像素保活 前台服务保活 账户同步拉活 JobScheduler 拉活 双进程...

  • 关于进程保活的两三事——新手升级经验卡

    首先,先搁下几个问题,什么是进程保活?为什么要有进程保活?最后才是进程保活要怎么实现??相信大家会迫不及待跳到最后...

  • Android进程保活实践总结

    Android进程保活

  • 深度剖析APP保活案例

    这是作者在去年处理的一个关于进程保活的案例 一. 引言 1.1 保活概述 什么是保活?保活就是在用户主动杀进程,或...

  • 关于 Android 进程保活

    关于 Android 进程保活 Android进程保活手段主要分3种: 1:利用不同的app进程使用广播来进...

  • 进程保活方案学习

    进程保活方案 进程保活主要有两个方案 提高进程优先级,降低死亡几率 在进程被杀死后进行拉活 进程为什么会死亡 从L...

  • 进程保活

    https://www.cnblogs.com/bugly/p/5765334.html

  • 进程保活

    https://mp.weixin.qq.com/s/r3-5Y_e_0fq3_7a8kdGWog

  • 进程保活

    Service service:是一个后台服务,专门用来处理常驻后台的工作的组件。 Service被强的原因: 内...

网友评论

    本文标题:进程保活

    本文链接:https://www.haomeiwen.com/subject/nvbovqtx.html