高中生,可以选择更好的学校

内存不足时Android 系统如何Kill进程

2013-11-14 08:54来源:武汉北大青鸟鲁广校区

  大家其实都或多或少知道,Android系统有自已的任务管理器,当系统内存不足时,系统需要KILL一些进程(应用),以回收一部分资源,来保证系统仍可以正常的运行,而不会崩溃,今天,就具体讲讲这个原理。

  进程优先级(importance hierarchy)

  Android系统尽量保持进程运行的更久,但是仍有时候,需要结束掉老的进程,回收内存来保证新的,或更重要的进程运行。要决定哪些进程运行,哪些被 KILL,系统会为每个运行的进程或者组件设置其进程优先级。通常KILL的顺序是优先级低,然后其次,等等依次这样下去。

  一共有五级:

  前台进程(Foreground Process)

  满足以下条件即为前台进程:

  a. 用户当前正在操作的Activity(Activity.onResume方法已经被调用了);

  b. Service绑定到用户当前正在操作的Activity;

  c. Service在前台运行(Service.startForeground);

  d. Service正在执行生命周期中的方法之一(onCreate, onStart, onDestroy);

  e. BroadcastReceiver正在执行onReceive方法;

  通常,前台进程是很少的(就以上几种),所以它们是后被KILL的(内存少,系统为了能保证正常运行,且能与用户交互,当前台进程不止一个时,会KILL某些前台进程)。不过,这情况,对于目前的手机来说,不太可能发生的事。

  可见进程(Visible process)

  满足以下条件即为可见进程:

  a. Activity不为前台进程,但生命周期处于onPause状态,也就是说,一个Dialog挡住了部分Activity;

  b. 和1.b中一样,Service绑定在当前可见或前台Activity;

  可见进程同样也很重要,当系统内存不足,且为了保证前台进程继续运行时,可见进程会被KILL掉。

  服务进程(Service process)

  通常都是被startService方法调用而运行的Service,而没有绑定到其它Activity上(即1.b, 2.b中所说的情况),这些Service可能是在后台下载,或是类似音乐播放器一样等服务,同样,为了保证前台和可见进程能够正常运行,系统会KILL 掉服务进程。

  后台进程(Background process)

  这些进程通常都是Activity完不可见,即生命周期处于onS阶段时,只要不影响到用户的操作,那么,就可以随时被系统KILL掉用来保证前台,可见或是服务进程的运行。通常,有很多后台进程在运行,系统会将它们放入到LRU(Last Recent Used,近使用)列表中,用来决定:近使用过的后被KILL,而很长时间没使用过的,将会被个KILL掉。

  空进程(Empty process)

  这类进程没有任何活动应用,之所有会有这样的进程,是为了缓存的目的。为了加快某个组件下次启动的时间而设计的。系统经常KILL这些进程用来平衡整个系统资源(通常是在进程缓存和内核缓存之间做平衡)。

  总结:

  i) 系统会根据进程的不同状态,会动态调整进程的优先级,比如:用户当前与某个Activity交互,然后按了一下HOME键,则进程从前台进程切换至后台进程,并被加入到LRU列表中;

  ii) 进程所处不同的优先级,将会决定当系统内存不足时,其命运将会如何,进程被KILL的顺序上面已经说的很清楚了,我这里再罗列下(空进程不考虑):

  — 后台进程 -> 服务进程 -> 可见进程 -> 前台进程;

  后台进程又以LRU来决定:

  — LRU中找到长时间没用过的先被KILL,然后找到其次长时间没用过的被KILL,依次类推,而近被使用过的后KILL。

只为了方便您就学 北大青鸟鲁广校区 北大青鸟鲁广校区

武汉市洪山区珞瑜路724号武汉数码港

全真项目实战 入学签就业协议

Copyright © 2006-2020 武汉宏鹏职业培训学校 版权所有 鄂ICP备11007753号 CacheTime: 2018-03-26 09:36:37CacheID:35

青少年网络使用习惯调查