Android进程优先级:等级低的就被Kill掉了

一. 定义

  • Android系统中,当内存不足时会kill掉一些程序(或进程)来释放内存给需要运行的程序来使用。
  • 进程的优先级越高,最后才会被kill掉,反之,最低的优先被kill。

二. Android系统中存在的进程

1.Zygote进程

Zygote,受精卵的意思...在Android系统中,所有的系统服务进程SystemServer以及应用程序进程都是由Zygote进程Fork(孕育)出来的。

2.App主进程

每一个App都是运行在一个独立的进程中,当然这个进程也是由Zygote进程Fork出来的。App的进程的名称就是包名,并由AMS(ActivityManagerService)管理,顺带提一下BroadcastReceiver的发送也是由AMS来完成的。

3.App辅助进程

一个App可以拥有多个进程,具体为在AndroidManifest.xml文件中为Activity或者Service进行配置android:process=""。同样,辅助进程也是由Zygote Fork出来并由AMS管理。

4.Native进程

Android程序运行在Dalvik虚拟机中,NDK允许用户使用类似C / C++之类的原生代码语言执行部分程序。由NDK所Fork出的进程称之为Native进程。Native进程自由度较高可以不受AMS管理。另,NDK也可用来做进程保活。

三. Android系统中进程的优先级

Android系统中进程的优先级定义在com.android.server.am.ProcessList类中,这个类在SDK中可以找到。
主要有以下优先级定义(oom_adj值):

名称 说明
UNKNOWN_ADJ = 16 预留最低级别,缓存用可能设置为这个
CACHED_APP_MAX_ADJ = 15 持有不可见的Activity的进程,也就是后台进程,系统内存不足会被Kill
CACHED_APP_MIN_ADJ = 9 缓存进程,也就是空进程
SERVICE_B_ADJ = 8 不活跃的进程
PREVIOUS_APP_ADJ = 7 切换进程,切换应用程序时保存的之前的进程
HOME_APP_ADJ = 6 与Home交互的进程
SERVICE_ADJ = 5 包含Service的进程,一般来说Kill掉对用户影响不太大
HEAVY_WEIGHT_APP_ADJ = 4 高权重进程,在后台运行但是系统尽量不Kill掉
BACKUP_APP_ADJ = 3 托管备份的进程,Kill掉是一个bad idea
PERCEPTIBLE_APP_ADJ = 2 可被用户感知的进程,比如音乐播放器
VISIBLE_APP_ADJ = 1 可见进程,用户可以见到的进程,但不一定都是前台进程,有可能是被覆盖的Activity
FOREGROUND_APP_ADJ = 0 前台进程,运行在前台的App的进程
PERSISTENT_SERVICE_ADJ = -11 重要进程,系统或重要进程绑定的进程
PERSISTENT_PROC_ADJ = -12 核心进程,系统持续进程,如电话
SYSTEM_ADJ = -16 系统进程
NATIVE_ADJ = -17 不由系统管理的Native相关进程

查看进程优先级:

  //oom_adj的值就是进程的优先级
  //查看oom_adj值
  cat /proc/${pid}/oom_adj

四. Android系统中常见进程

优先级从高到低排列:

1. 前台进程(Foreground process)

满足以下几个条件被视为前台进程:

  • 进程持有一个正与用户交互的Activity。
  • 进程持有一个满足以下条件的Service:
    1、与正在交互的Activity绑定;
    2、使用startForeground()启动的前台服务;
    3、Service正在执行生命周期函数,onCreate(), onStart(), or onDestroy()
  • 进程持有一个正在执行onReceive()的BroadcastReceiver。
2. 可见进程(Visible process)
  • 进程持有一个可见的Activity,比如被Dialog遮挡进入onPause()状态的Activity。
  • 进程持有一个和可见的(或前台的)Activity绑定的Service。
3 服务进程(Service process)
  • 进程持有一个使用startService()开启的服务,且不属于以上两种优先级较高的Service,被视为服务进程。比如后台播放音乐,下载文件。
4 后台进程(Background process)
  • 进程持有不可见的,调用了onStop()但是没有调用onDestroy()的Activity,被认为是后台进程。这样做的原因是保存一些Activity用于用户选择和跳转。它们会被保存在一个LRU (least recently used)列表中,系统内存不足时可能会Kill掉最早的Activity,可以通过重写onSaveInstanceState()在被Kill之前来保存数据。
5 空进程
  • 进程中不包含活跃的组件,被认为是空进程。保存这种进程的原因是缓存需要。

五. 提高进程优先级

  • AndroidManifest.xml中配置android:persistent="true"
  • 在Service中开启线程做耗时操作,会被判断为服务进程。
  • startForeground()启动前台服务,记得使用stopForeground()关闭。
  • 与NotificationManager交互,让进程变成可感知进程。
  • 使用广播,避免成为空进程。
  • 使用Native进程做进程保活(只是思路)。

参考资料:

Android平台App进程优先级
Android基础总结——进程优先级及提高优先级的方法(Service尽量不死之法)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,376评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,126评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,966评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,432评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,519评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,792评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,933评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,701评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,143评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,488评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,626评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,292评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,896评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,742评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,977评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,324评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,494评论 2 348

推荐阅读更多精彩内容