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多进程注意事项
    更加详细请查看原文
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

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