Android多进程使用总结

使用多进程
  1. ApplicationActivityServiceReceiverProvider均支持 android:process 属性,值以冒号开头,该进程就是私有进程,反之就是公有进程
  2. 通过 JNI,生成子进程。(一般用于 daemon 进程,来实现防杀,保活等效果)

进程级别
  1. 前台进程
    1.1 进程包含正与用户交互的 Activity
    1.2 进程包含 Service,且 Service 绑定到正与用户交互的 Activity
    1.3 进程包含在前台运行的 Service
    1.4 进程包含正执行一个生命周期回调的 Service
    1.5 进程包含正执行其 onReceive() 方法的 BroadcastReceiver
  2. 可见进程(被视为是极其重要的进程,除非为了维持所有前台进程同时运行而必须终止,否则系统不会终止这些进程。)
    2.1 进程包含不在前台、但仍对用户可见的 Activity
    2.2 进程包含绑定到可见 ActivityService
  3. 服务进程(除非内存不足以维持所有前台进程和可见进程同时运行,否则系统会让服务进程保持运行状态。)
    3.1 进程包含已使用 startService() 方法启动的服务且不属于上述两个更高类别进程的进程。
  4. 后台进程
    4.1 进程包含目前对用户不可见的 Activity
  5. 空进程
    5.1 不含任何活动应用组件的进程。用于缓存以便下次启动迅捷。

注:

  1. 系统会对进程评定为它能达到的最高级别,如进程 A同时满足前台进程和可见进程的条件,则进程 A为前台进程。
  2. 服务于另一进程的进程其级别永远不会低于其所服务的进程。 例如,进程 A进程 B 提供服务,则进程 A 始终被视为至少与进程 B同样重要。(大于或等于)

杀进程

当内存不足以分配时,就会根据进程级别以及占用内存大小清除进程。


使用场景
  1. 常驻后台任务应用。(具体看下面例子)
  2. 多进程开发能为应用解决了OOM问题,Android对内存的限制是针对于进程的,这个阈值可以是48M、24M、16M等,视机型而定,所以,当我们需要加载大图之类的操作,可以在新的进程中去执行,避免主进程OOM
  3. 更有效、合理的利用内存。我们可以在适当的时候生成新的进程,在不需要的时候及时杀掉,合理分配,提升用户体验。减少系统被杀掉的风险。
  4. 多进程还能带来一个好处就是,单一进程崩溃并不影响整体应用的使用。

例子:播放音乐
A. 在 Activity 中直接播放音乐。(在 Activity 操作不好)
B. 启动后台 Service,播放音乐。(较 A 没什么区别,只是不知 Activity 操作)
C. 启动前台 Service,播放音乐。(单进程最好办法)
D. 在新的进程中,启动后台 Service,播放音乐。(多进程最优雅办法,保留系统调度的能力)
E. 在新的进程中,启动前台 Service,播放音乐。(多进程最好办法)


注意事项
  1. 静态变量和单例模式完全失效。
    因为进程间,内存空间是相互独立的,所以VM方法区内的静态变量也都是相互独立的。
  2. 线程同步机制完全失效。
    由于Java的同步机制是VM来进行调度的,两个进程拥有两个不同的VM,所以,同步也会在多进程开发中失效。
  3. Application会多次创建
    每个新进程在创建的时候,都会新建一个Application。可以根据进程名来区分不同的进程,进行不同的初始化,同时,不要在Application中设置过多的静态变量,导致内存增加。

结语

参考文章写得相当好,这里只是简单记录一下笔记,感谢原作者。


以上总结参考自

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

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,110评论 25 707
  • 1.什么是Activity?问的不太多,说点有深度的 四大组件之一,一般的,一个用户交互界面对应一个activit...
    JoonyLee阅读 5,731评论 2 51
  • 【Android Service】 Service 简介(★★★) 很多情况下,一些与用户很少需要产生交互的应用程...
    Rtia阅读 3,150评论 1 21
  • 本文出自 Eddy Wiki ,转载请注明出处:http://eddy.wiki/interview-androi...
    eddy_wiki阅读 3,267评论 0 20
  • 然后我就走过了一个小卖部 那是小学时全班最乖的人家里开的 想着去瞧瞧 走近才看见他坐在柜台电脑前对他妈发着脾气。 ...
    苘c阅读 190评论 0 0