Android内存回收机制

退出但不关闭:
  这是Android对于Linux的优化。当 Android 应用程序退出时,并不清理其所占用的内存,Linux 内核进程也相应的继续存在,所谓“退出但不关闭”。从而使得用户调用程序时能够在第一时间得到响应。
  应用切换到后台是暂停的,完全不耗cpu和电量,只保留了运行状态。如果app需要后台处理事务(放音乐),那么app进程会开启相应的服务,所以在后台有消耗的只有服务。
  占用CPU的应用才耗电,后台的只占内存,所以是不耗电的。
默认回收机制:
  当系统内存不足时,系统将激活内存回收过程。为了不因内存回收影响用户体验(如杀死当前的活动进程),
回收优先级:
  Android 基于进程中运行的组件及其状态规定了默认的五个回收优先级:
  IMPORTANCE_FOREGROUND:前台进程,目前正在屏幕上显示的进程和一些系统进程。
  IMPORTANCE_VISIBLE:可见进程,可见进程是一些不再前台,但用户依然可见的进程,比如输入法、天气、时钟等。
  IMPORTANCE_SERVICE:服务进程,拨号、邮件存储之类的。
  IMPORTANCE_BACKGROUND:后台进程,启动后被切换到后台的进程。
  IMPORTANCE_EMPTY:没有任何东西在内运行的进程,有些程序,比如BTE,在程序退出后,依然会在进程中驻留一个空进程,这个进程里没有任何数据在运行,作用往往是  提高该程序下次的启动速度或者记录程序的一些历史信息。
  home app:桌面进程,即launcher,保证在多任务切换之后,可以快速返回到home界面而不需重新加载launcher。
  系统会对进程的重要性进行评估,并将重要性以“oom_adj”这个数值表示出来。前台程序的“oom_adj”值为0,这意味着它不会被系统终止。
  可根据“oom_adj”值的范围来决定进程管理策略,比如可以设定“当内存小于X时,结束“oom_adj”大于Y的进程”。


触发内存回收的阈值:
  进行内存调度有个阀值,只有低于这个值系统才会按一个列表来关闭用户不需要的东西。当然这个值默认设置得很小,所以你会看到内存老在很少的数值徘徊。
  为什么内存少的时候运行大型程序会慢呢,原因是:在内存剩余不多时打开大型程序时会触发系统自身的调进程调度策略,这是十分消耗系统资源的操作,特别是在一个程序频  繁向系统申请内存的时候。这种情况下系统并不会关闭所有打开的进程,而是选择性关闭,频繁的调度自然会拖慢系统。
APP虚拟机:
  安卓Android上的应用是java,当然需要虚拟机,而安卓Android上的应用是带有独立虚拟机的,也就是每开一个应用就会打开一个独立的虚拟机.这样设计的原因是可以避免虚拟机崩溃导致整个系统崩溃,但代价就是需要更多内存。
Home键和返回键:
  Home键用来多任务切换,返回键相当于退出应用程序。
  按home退出,程序保留状态为后台进程;按返回键退出,程序保留状态为空进程。
部分手机home键后程序重启:
  (1)修改manifast如下:
<activity android:name="com.unity3d.player.UnityPlayerActivity" android:label="@string/app_name" android:configchanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen" android:screenorientation="landscape">
http://game.ceeger.com/forum/read.php?tid=9611&fid=2&page=1#115539
  (2)在后台开个服务
  http://bbs.9ria.com/thread-416715-1-1.html
  (3)有一种方法可以设置app永远不会被kill,AndroidManifest.xml 中添加:
  android:persistent="true"
  这样可使应用免受out-of-memory killer的影响
  适用于放在/system/app下的app。
  <application android:name="PhoneApp"
  android:persistent="true"
  android:label="@string/dialerIconLabel"
  android:icon="@drawable/ic_launcher_phone">
  ...
  </application>
  (4)设置runinbackground
  (5)QualitySettings.SetQualityLevel
  (6)是否能够手动设置切换QQ登陆还是网页模式登陆(内存过小时)
  (7)使用软件MinFreeManager设定各类进程触发OOM的阈值

时间: 2024-08-06 16:01:23

Android内存回收机制的相关文章

【转】Android 内存回收机制(默认回收与kernel回收)

Android APP 的运行环境 Android 是一款基于 Linux 内核,面向移动终端的操作系统.为适应其作为移动平台操作系统的特殊需要,谷歌对其做了特别的设计与优化,使得其进程调度与资源管理与其他平台的 Linux 有明显的区别.主要包含下面几个层次: Application Framework Application Framework 将整个操作系统分隔成两个部分.对应用开发者而言,所有 APP 都是运行在 Application Framework 之上,而并不需要关心系统底层的

Android 操作系统的内存回收机制(转载)

http://www.ibm.com/developerworks/cn/opensource/os-cn-android-mmry-rcycl/index.html Android APP 的运行环境 Android 是一款基于 Linux 内核,面向移动终端的操作系统.为适应其作为移动平台操作系统的特殊需要,谷歌对其做了特别的设计与优化, 使得其进程调度与资源管理与其他平台的 Linux 有明显的区别.主要包含下面几个层次: Application FrameworkApplication

Android 操作系统的内存回收机制

转自:http://android.jobbole.com/25169/ 简介:Android 是一款基于 Linux 内核,面向移动终端的操作系统.为适应其作为移动平台操作系统的特殊需要,谷歌对其做了特别的设计与优化,使应用程序关闭但不退出,并由操作系统进行进程的回收管理.本文在 Application Framework 与 Linux 内核两个层次上,以进程为粒度,对 Android 操作系统的进程资源回收机制进行了剖析.读者可以从本文获得对 Android 应用程序的生存周期的进一步理解

Android 操作系统的内存回收机制[转]

转自:http://www.ibm.com/developerworks/cn/opensource/os-cn-android-mmry-rcycl/ Android APP 的运行环境 Android 是一款基于 Linux 内核,面向移动终端的操作系统.为适应其作为移动平台操作系统的特殊需要,谷歌对其做了特别的设计与优化,使得其进程调度与资源管理与其他平台的 Linux 有明显的区别.主要包含下面几个层次: Application Framework Application Framewo

Android 内存管理机制详解

??嵌入式设备的一个普遍特点是内存容量相对有限.当运行的程序超过一定数量时,或者涉及复杂的计算时,很可能出现内存不足,进而导致系统卡顿的现象.Android 系统也不例外,它同样面临着设备物理内存短缺的困境.对于已经启动过一次的Android程序,再一次启动所花的时间会明显减少.原因在于Android系统并不马上清理那些已经"淡出视野"的程序(比如你调用Activity.finish退出UI界面).它们在一定的时间里仍然驻留在内存中.这样做的好处是明显的,即下一次启动不需要再为程序重新

Android内存管理机制及优化

1.基于Linux内存管理 Android系统是基于Linux 2.6内核开发的开源操作系统,而linux系统的内存管理有其独特的动态存储管理机制.不过Android系统对Linux的内存管理机制进行了优化,Linux系统会在进程活动停止后就结束该进程,而Android把这些进程都保留在内存中,直到系统需要更多内存为止.这些保留在内存中的进程通常情况下不会影响整体系统的运行速度,并且当用户再次激活这些进程时,提升了进程的启动速度. 2.Android内存分配机制 与java的垃圾回收机制类似,系

Android内存管理机制详解 (zhuan)

http://www.2cto.com/kf/201212/175786.html 与windows内存区别 在Linux中经常发现空闲内存很少,似乎所有的内存都被系统占用了,表面感觉是内存不够用了,其实不然.这是Linux内存管理的一个优秀特性,在这方面,区别于 Windows的内存管理.主要特点是,无论物理内存有多大,Linux都将其充份利用,将一些程序调用过的硬盘数据读入内存,利用内存读写的高速特性来提高Linux系统的数据访问性能.而Windows是只在需要内存时,才为应用程序分配内存,

linux kernel内存回收机制

转:http://www.wowotech.net/linux_kenrel/233.html linux kernel内存回收机制 作者:itrocker 发布于:2015-11-12 20:37 分类:内存管理 无论计算机上有多少内存都是不够的,因而linux kernel需要回收一些很少使用的内存页面来保证系统持续有内存使用.页面回收的方式有页回写.页交换和页丢弃三种方式:如果一个很少使用的页的后备存储器是一个块设备(例如文件映射),则可以将内存直接同步到块设备,腾出的页面可以被重用:如果

(转)PHP zval内存回收机制和refcount_gc和is_ref_gc

出处 : http://blog.sina.com.cn/s/blog_75a2f94f0101gygh.html 对于PHP这种需要同时处理多个请求的程序来说,申请和释放内存的时候应该慎之又慎,一不小心便会酿成大错.另一方面,除了要安全的申请和释放内存外,还应该做到内存的最小化使用,因为它可能要处理每秒钟数以千计的请求,为了提高系统整体的性能,每一次操作都应该只使用最少的内存,对于不必要的相同数据的复制则应该能免则免.我们来看下面这段PHP代码: $a = "hello"; $b =