Android中的进程保活方式主要分为以下三种:

  • 黑色保活:不同的app进程,用广播相互唤醒(包括利用系统提供的广播进行唤醒)
  • 白色保活:启动前台Service
  • 灰色保活:利用系统的漏洞启动前台Service

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

  • 1.开机,网络切换、拍照、拍视频时候,利用系统产生的广播唤醒app
  • 2.接入第三方SDK也会唤醒相应的app进程,如微信sdk会唤醒微信,支付宝sdk会唤醒支付宝。由此发散开去,就会直接触发了下面的 3
  • 3.比如你手机里装了支付宝、淘宝、天猫等阿里系的app,那么你打开任意一个阿里系的app后,有可能就顺便把其他阿里系的app给唤醒了

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

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

API < 18,启动前台Service时直接传入new Notification();API >= 18,同时启动两个id相同的前台Service,然后再将后启动的Service做stop处理

熟悉Android系统的都知道,系统出于体验和性能上的考虑,app在退到后台时系统并不会真正的kill掉这个进程,而是将其缓存起来。打开的应用越多,后台缓存的进程也越多。在系统内存不足的情况下,系统开始依据自身的一套进程回收机制来判断要kill掉哪些进程,以腾出内存来供给需要的app。

这套杀进程回收内存的机制就叫 Low Memory Killer ,它是基于Linux内核的 OOM Killer(Out-Of-Memory killer)

根据进程的重要性,可以划分为5级:

  • 前台进程 (Foreground process)
  • 可见进程 (Visible process)
  • 服务进程 (Service process)
  • 后台进程 (Background process)
  • 空进程 (Empty process)

了解完 Low Memory Killer,再科普一下oom_adj。什么是oom_adj?它是linux内核分配给每个系统进程的一个值,代表进程的优先级,进程回收机制就是根据这个优先级来决定是否进行回收。对于oom_adj的作用,你只需要记住以下几点即可:

进程的oom_adj越大,表示此进程优先级越低,越容易被杀回收;越小,表示进程优先级越高,越不容易被杀回收普通app进程的oom_adj>=0,系统进程的oom_adj才可能<0

有些手机厂商把这些知名的app放入了自己的白名单中,保证了进程不死来提高用户体验(如微信、QQ、陌陌都在小米的白名单中)。如果从白名单中移除,他们终究还是和普通app一样躲避不了被杀死。

更多相关文章

  1. 第三章:Creating Applications and activities-(四)Android的应用
  2. Android(安卓)App Daemon
  3. Android(安卓)OpenGL ES 从入门到精通系统性学习教程
  4. Android的原理-不需要太多的剩余内存
  5. [置顶] Android进程管理(详解)
  6. android音乐播放器-------使用android系统自带的数据库
  7. Android(安卓)64bit系统中app以32bit运行
  8. 浅谈Android应用的退出
  9. 你真的相信Android手机有加速秘技?这三个旧习惯该改改了

随机推荐

  1. 死磕这50道MySQL面试题,阿里面试官直呼内
  2. 2021-04-02:给定一个正方形或者长方形矩阵
  3. 博士生研究工具和软件掌握,名单向国际一流
  4. 为什么需要对数据转换,和转换的方法
  5. 考考你的经济学水平,不服来战,学霸们
  6. 送|R语言全套视频和资料,异常珍贵的材料
  7. 最全估计方法,解决遗漏变量偏差,内生性,混淆
  8. 4-2(vector)
  9. 数十亿用户的Facebook如何进行贝叶斯系统
  10. 开源数据搜索软件公司Elasticsearch上市,