进程划分

Posted 安卓笔记侠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进程划分相关的知识,希望对你有一定的参考价值。

1.前台进程(Foreground process)

场景:

  • 某个进程持有一个正在与用户交互的Activity并且该Activity正处于resume的状态。
  • 某个进程持有一个Service,并且该Service与用户正在交互的Activity绑定。
  • 某个进程持有一个Service,并且该Service调用startForeground()方法使之位于前台运行。
  • 某个进程持有一个Service,并且该Service正在执行它的某个生命周期回调方法,比如onCreate()、 onStart()或onDestroy()。
  • 某个进程持有一个BroadcastReceiver,并且该BroadcastReceiver正在执行其onReceive()方法。

用户正在使用的程序,一般系统是不会杀死前台进程的,除非用户强制停止应用或者系统内存不足等极端情况会杀死。

 

2.可见进程(Visible process)

场景:

  • 拥有不在前台、但仍对用户可见的 Activity(已调用 onPause())。(当另一个个Activity设置为dialog模式时可能出现这种情况)
  • 拥有绑定到可见(或前台)Activity 的 Service
  • 拥有系统关键特性的Service,如动态壁纸、输入法等服务。

用户正在使用,看得到,但是摸不着,没有覆盖到整个屏幕,只有屏幕的一部分可见进程不包含任何前台组件,一般系统也是不会杀死可见进程的,除非要在资源吃紧的情况下,要保持某个或多个前台进程存活

 

3.服务进程(Service process)

场景

  • 某个进程中运行着一个Service且该Service是通过startService()启动的,与用户看见的界面没有直接关联。

在内存不足以维持所有前台进程和可见进程同时运行的情况下,服务进程会被杀死

 

4.后台进程(Background process)

这是一种对用户体验没有直接影响的进程,系统会在需要内存的时候随时回收这种进程,这种进程通常会持有一个已调用onStop方法的Activity。

 

5.空进程(Empty process)

不含任何活动应用组件的进程。保留这种进程的的唯一目的是用作缓存,以缩短下次在其中运行组件所需的启动时间。 为使总体系统资源在进程缓存和底层内核缓存之间保持平衡,系统往往会终止这些进程。

 

以上是关于进程划分的主要内容,如果未能解决你的问题,请参考以下文章

1. 进程虚拟地址空间区域划分

进程的内存空间划分(详解)

进程地址空间——学习笔记

进程地址空间——学习笔记

Linux第一座高山——进程地址空间

如何使用 fork 进程实现合并排序?