《Android 中LMK机制分析》.docx

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《Android 中LMK机制分析》

Android 中LMK机制分析一、Android进程管理Android是一个多任务系统,当启动一个程序时会消耗一定的时间。为了加快运行速度,当退出一个程序时,Android并不会立即杀掉它。这样当用户重新运行该程序时,可以很快地启动。但随着系统中保留的程序越来越多,内存肯定会出现不足,此时就有了Android的低内存管理(Low Memory Killer)机制。Android根据进程的重要性,将进程分为以下几类:前台进程(forground process),用户正在做的事情相关的进程,具体包括:正在和用户交互的Activty,即该Activity的onResume()已经执行过。包含一个service,该service正在服务于和用户交互的Activity。包含一个service,该service正在执行onCreate(),或者onStart(),onDestroy()。包含一个BroadcastReceiver,正在执行onRceive()函数可见的进程(visible process),尽管没有和用户交互,但是却可以影响用户所能看得到的内容。尽管没有包含和用户交互的Activity,但是用户却可以看得见该Activity的窗口,比如一个Activity上面弹出一个对话框的情况包含一个service,该service服务于可见的Activity。服务进程(service proces),凡是使用startService()所启动的service对象,其所在的进程都称之为服务进程。当然,如果该service满足上面两个优先级中的条件,则会上升为相应的优先级后台进程(background process),不满足以上任何一个条件的进程,同时该进程中还包含一些不可见的Activity,这些进程不影响正在和用户交互的Activity。空进程(empty process),进程中不包含任何component,包括Activity、service、receiver对象。之所以还保留这些进程的原因是为了减少重新创建进程的开销。以上每个进程都会有个oom_adj值。二、oom_adj的值是如何赋予的进程的adj类型,可以在ActivityManagerService中清楚的看到: static final int EMPTY_APP_ADJ; static final int HIDDEN_APP_MAX_ADJ; static final int HIDDEN_APP_MIN_ADJ; static final int HOME_APP_ADJ; static final int BACKUP_APP_ADJ; static final int SECONDARY_SERVER_ADJ; static final int HEAVY_WEIGHT_APP_ADJ; static final int PERCEPTIBLE_APP_ADJ; static final int VISIBLE_APP_ADJ; static final int FOREGROUND_APP_ADJ; static final int CORE_SERVER_ADJ = -12; static final int SYSTEM_ADJ = -16; ActivityManagerService定义各种进程的oom_adj,CORE_SERVER_ADJ代表一些核心的服务的omm_ad,数值为-12,这类进程永远也不会被杀死。其他未赋值的都在static块中进行了初始化,是通过system/rootdir/init.rc进行配置的:在init.rc中:# Define the oom_adj values for the classes of processes that can be# killed by the kernel. These are used in ActivityManagerService. setprop ro.FOREGROUND_APP_ADJ 0 setprop ro.VISIBLE_APP_ADJ 1 setprop ro.SECONDARY_SERVER_ADJ 2 setprop ro.HIDDEN_APP_MIN_ADJ 7 setprop ro.CONTENT_PROVIDER_ADJ 14 setprop ro.EMPTY_APP_ADJ 15# Define the memory thresholds at which the above process classes will# be killed. These numbers are in pages (4k). setprop ro.FOREGRO

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档