- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Android内存管理机制的研究
Android内存管理机制的研究
本文深入分析了Android操作系统的内存管理机制以及内存回收机制,并针对Android应用开发者提出了有效可实施的建议。
Android 内存管理 内存回收
1 引言
伴随国内4G的启动以及各大运营商移动互联网流量经营的不断深入,移动互联网应用将再次迎来飞速增长,移动APP将进一步渗入用户的基本生活,中国电信也在移动互联网应用方面做了大量研发工作。鉴于移动终端操作系统在资源分配、管理以及回收上对应用有着更为严格的限制,为了能够使移动APP高效稳定的运行,APP开发人员有必要深入了解移动终端操作系统的内存管理机制,并根据操作系统的限制,合理使用内存空间,避免被操作系统强杀,提高APP的可靠性。
2 Android内存管理机制
2.1 Android与Linux
Android系统是Google在Linux内核基础上开发,针对移动设备进行了特殊优化的开源操作系统。特别是在内存管理机制上,针对移动终端资源特点及移动APP应用特点进行了优化,当进程活动停止后,Android不会立刻结束这个进程,而是将进程保留在内存中,当用户尝试再次激活此进程时,可以直接复用内存中的数据从而提升进程的启动速度,当系统需要更多内存时,Android才会将这些进程占用的内存释放。
同样,继承自Linux的Android操作系统也可以通过系统命令“cat/proc/meminfo”查看内存使用情况,如图1所示。其中,MemTotal:总的可用内存;MemFree:未被分配空闲的内存;Buffers:buffer的大小;Cached:cache的大小;SwapCached:swap缓存的大小,Android很少使用swap,经常为0。
2.2 Android进程回收(LMK)
(1)进程回收优先级
1)进程优先级及oom_adj
Android是一个多任务系统,即可以同时运行多个程序。操作系统启动运行一个程序是需要一定系统开销(CPU、时间等)的。因此,如在2.1节中提到,为了应用再次启动时的启动速度,当用户退出一个程序后,Android操作系统仍然会将这个程序保留在内存中,当程序再次被启动时就可以快速启动。当系统内存出现不足时,Android系统会按照一定的优先级,对运行中的程序进行回收,以释放内存。
如图2所示,Android操作系统将运行中的进程分为6类,并在内存不足时按照空进程(EMPTY_APP)、内容供应节点(CONTENT_PROVIDER)、后台进程(HIDDEN_APP)、次要服务进程(SECONDARY_SERVER)、可视进程(VISIBLE_APP)和前台进程(FOREGROUND_APP)的顺序,逐一对进程进行回收。
Android操作系统为每个进程维护一个oom_adj值,一进程的oom_adj值也就代表了它的优先级,oom_adj值越高代表该进程优先级越低。各进程含义及oom_adj值如下:
◆前台进程(FOREGROUND)oom_adj:0
用户在屏幕上可见的应用程序进程,同时也包括(可能不可见的)系统进程或电话服务进程。最为直接的例子就是用户正在使用的应用程序进程就是前台进程,而前台进程的优先级最高,也最不容易被系统回收。
◆可见进程(VISIBLE)oom_adj:1
应用程序仍然可见,但是已经不是前台进程的应用进程。比如:当某个前台应用程序被另外一个应用程序的通知遮盖了一部分(通知通常在屏幕正中,但周边仍然能见到原来的应用程序),这时此应用程序进程由前台进程转为了可见进程。可见进程的优先级仍然较高,仅次于前台进程。
◆次要服务(SECONDARY SERVER)进程oom_adj:2
次要服务指的是系统后台正在运行的服务进程(包括系统桌面、UI等服务,但电话、系统底层服务等主要服务不在此列,因此命名为次要服务)。后台运行(不可见)的包含服务的应用进程是次要服务的主要组成部分,次要服务的优先级低于可见进程。
◆后台进程(HIDDEN)oom_adj:7
后台进程指的是不可见的且不包含服务,但仍在运行的应用进程。当用户返回桌面时,之前用户正在使用的应用程序如果不包含服务,则此应用程序变为后台进程。
◆内容供应节点(CONTENT PROVIDER)
oom_adj:14
内容供应节点指为其他应用提供数据内容的进程,联系人、日历等进程属于内容供应节点。
◆空进程(EMPTY)oom_adj:15
空进程指在后台处于挂起状态的应用进程,没有任何代码在执行。空进程的优先级最低,在LMK工作机制中,属于最先被回收的类别。
2)进程
原创力文档


文档评论(0)