高中生,可以选择更好的学校
热门专业

课程预订

姓名:
年龄:
学历:
电话:

QQ:

校验码:

点图更换

 

内存不足时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。

  • 武汉北大青鸟鲁广校区-安卓课程介绍
  • 武汉北大青鸟鲁广校区-来校路线
  • 武汉北大青鸟鲁广校区-在线咨询

作者: 武汉北大青鸟 原载: 武汉北大青鸟鲁广校区www.027hpit.com
(版权所有,转载时必须以链接形式注明作者和原始出处及本声明)

相关文章

新闻图片

Copyright 2006-2020 版权所有 武汉宏鹏职业培训学校 鄂ICP备11007753号