人人都应该了解的 Android 进程管理机制

打开设置--应用与服务(不同机型进入方式可能不同),你就会看到当前正在运行的进程和服务,也就是目前正在“后台运行”的任务。列表中有你刚刚使用过的 APP ,也有一两小时前打开过的 APP。还有一些软件你甚至不知道自己什么时候打开过(其实根本就不是自己打开的),或者记得自己已经“关闭”了,但它们也在列表中,消耗着你的手机资源。列表中有一些条目名字很奇怪,一般人看不懂,但还是觉得“它很重要”,不敢轻易强制关闭。这个列表展示的内容和普通的后台管理界面不太一样,感觉稍稍有些神秘,然而这又是我们日常使用所回避不了的一部分。

作为一名资深的手机用户(我相信人人都是),是时候该解决这类疑问了。这一切都要从人与宇宙的关系。。。咳咳。。手机进程的概念开始说起。

什么是进程

在开发文档中是这么说的:当一个应用程序启动时(仅仅只是“启动时”,并不一定有组件运行),就会产生一个进程。在这个进程中同时会创建一个主线程,使应用内的任务开始执行。Android系统总是尽可能地保留进程。举个例子,当你打开qq时,进程创建(同时创建主线程),随后各种内容加载(首先是活动,然后是各种控件什么的)。当你完成操作时,一般都会按后退键(back),直至退出程序。

这里需要注意,一般情况下我们一直按后退是希望应用程序关闭的。然而事实上这样做只是关闭了界面(活动),大多数app的“进程”仍会保留(少数良心app可以设置在退出时“完全关闭”),占用内存以进行后台任务。进程随应用启动而产生,但往往并不随着应用的“关闭”而关闭

所以很多时候我们看上去关闭了程序,但其实它仍在后台运行!(此处请自行回忆那些困扰你的流氓软件们)。不过不必担心,Android 系统自有一套进程管理机制来帮你管理后台任务。系统会根据应用的重要程度把所有进程划归为几个等级,最不重要的进程将会被优先关闭,相对重要的进程将获得资源来保留。

那么问题来了----到底如何分辨哪些进程重要而哪些不重要呢?

五种进程优先级:

系统当然要保证用户体验,所以重要等级的划分原则就是要首先满足用户当前的需求:用户正在使用的当然不能关闭,而用户暂时不需要的,相对的就没那么重要了。

1.Foreground process 前台进程:也就是用户正在进行操作的进程。这样的进程优先级(优先保留)最高,最不容易销毁,因为它表现在屏幕上,直接同用户进行交互,所以只有当内存资源极度紧张等一些其他极端情况才会关闭,表现为“闪退”。我用的第一台 Android 手机运行内存(RAM)只有 290M,多任务时经常内存不足导致程序“闪退”。这手机我竟然用了两年,现在想想都佩服我自己hhhh。

不只是界面交互,如果应用程序中的服务(service)组件正在进行一些操作或者广播接收者(BroadcastReceiver)在执行接收广播的操作(onReceive)时,该进程仍被视为前台进程。

2.Visible process 可视进程:顾名思义,就是仍然在屏幕上有显示,但用户不再能直接与它交互的程序。比如当在应用中打开下滑菜单时(有些下滑菜单是透明的),用户能“看得到”,但是“摸不着”。优先级仅次于前台进程。

3.Service process 服务进程:该进程中开启了一个服务(通过startService方法)。注意这里强调的是服务的“开启”,区别于第一类中的“服务正在执行一些操作”。大多数音乐软件都是通过这种方法来保留其播放音乐的进程。

4.Background process 后台进程:当你按下 HOME 键或 BACK 键时,手机退回主界面,此时应用程序不再可见,转入后台运行。如果如果不满足前几类的条件,这个进程就会被判定为后台进程。

5.Empty process 空进程:A process that doesn't hold any active application components.没有任何组件在运行,包括活动界面(Activity)。事实上用户已经不再需要这个进程了,但出于 Android 系统“尽可能保留进程”的原则,这样的进程出现后不会被立即销毁。保留进程的唯一理由,就是为了下次开启这个应用时能快一些。其实现在的手机硬件性能足够好,这样的缓存对于用户体验的提升效果不怎么明显。这样的进程最不重要,将首先被销毁。

也许你已经注意到了,在屏幕上正在显示的或者正在服务于用户的进程的重要等级是比较高的,这是出于对用户体验的考虑-----谁会接受在自己打王者荣耀的时候游戏突然闪退呢?大多数情况下,一个应用程序的组件成分都会比较复杂,这个进程可能同时满足多个级别的划分条件。在这种情况下,它会被尽可能地划为能够达到的最重要等级。

饱受诟病的“全家桶”

如果你的手机上安装了好几个同一家公司推出的 APP(比如企鹅系、头条系等),那么当你启动其中之一时,剩下的几款 APP 大概率也会被唤醒(视软件的流氓程度而定)。联动开启的 APP 会大大占用内存,让手机变得卡顿。并且它们许多都需要联网服务,占用网速,有些还会在你不知情(因为你并没有直接开启或使用它们)的情况下监控你的数据并上传。

不过,你以为这就完了?

事实上,如果不手动清除,这样的进程很难被系统关闭,它们会一直长期运行。这些进程大多属于第三或第四等级,然而如果不同 APP 中的组件构成“相互依赖”的关系,它们所属进程的保留优先级就会提高,也就越不容易被关闭。(我等流氓软件可不是浪得虚名的ε=ε=ε=( ̄▽ ̄)

超级管家

尽管 Android 想要尽可能的保存所有的进程,但是并非所有的内存都会被用于维持进程。比如系统运行会占用相当的内存,系统也需要留出一部分闲置内存用以处理新事件。Android 的管理让内存的分配处于一种“动态平衡”中,以保障各项任务都能尽可能的稳定、高效地执行。


好了,关于进程的管理就暂时说到这了。众所周知,Android 系统是一个复杂的机体,它管理着手机硬件和软件,让它们尽可能的配合,提供给用户最好的服务。这次只是简单介绍了进程管理机制,今后我也会尽量用通俗的语言从系统上去解释那些平常看上去似是而非的问题,期待你的关注!

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

推荐阅读更多精彩内容

  • Android内存管理机制 [转载自大果仁Pareto的 android内存管理机制] 1、基于Linux内存管理...
    月落3804阅读 876评论 0 3
  • 如何能让我们的应用能够在系统后台持续地运行是一个自Android从娘胎里出来时就议论不停的话题,而且这似乎成了一个...
    骏骏的简书阅读 1,107评论 1 19
  • 操作系统对内存的管理 没有内存抽象的年代 在早些的操作系统中,并没有引入内存抽象的概念。程序直接访问和操作的都是物...
    Mr槑阅读 16,686评论 3 24
  • 我女儿一直想要爸爸送她去,于是经常问幼儿园的老师,今天是不是爸爸来。 某天,我老婆跟我说,幼儿园老师在问,你什么时...
    聊点正事儿阅读 149评论 0 0
  • 冰与火原著里的每个人物都有大量的内心独白,然而这些内心独白电视剧里是无法说出来的,但是看过原著的就知道,这部剧的感...
    桦丁阅读 436评论 0 2