写道
Android采取了一种有别于Linux的进程管理策略,有别于Linux的在进程活动停止后就结束该进程,Android把这些进程都保留在内存中,直到系统需要更多内存为止。
这些保留在内存中的进程通常情况下不会影响整体系统的运行速度,并且当用户再次激活这些进程时,提升了进程的启动速度。
那Android什么时候结束进程?结束哪个进程呢?之前普遍的认识是Android是依据一个名为LRU(last recently used 最近使用过的程序)列表,将程序进行排序,并结束最早的进程。
其实安卓的内存管理机制是这样的,如下:
1、系统会对进程的重要性进行评估,并将重要性以“oom_adj”这个数值表示出来,赋予各个进程;
(系统会根据“oom_adj”来判断需要结束哪些进程,一般来说,“oom_adj”的值越大,该进程被系统选中终止的可能就越高)
2、前台程序的“oom_adj”值为0,这意味着它不会被系统终止,一旦它不可访问后,会获得个更高的“oom_adj”,我们推测“oom_adj”的值是根据软件在LRU列表中的位置所决定的;
3、Android不同于Linux,有一套自己独特的进程管理模块,这个模块有更强的可定制性,可根据“oom_adj”值的范围来决定进程管理策略,比如可以设定“当内存小于X时,结束“oom_adj”大于Y的进程”。
这给了进程管理脚本的编写以更多的选择。
Android将进程分为六大类:
1、前台进程(foreground):目前正在屏幕上显示的进程和一些系统进程。
2、可见进程(visible):可见进程是一些不在前台,但用户依然可见的进程。
3、次要服务(secondary server):目前正在运行的一些服务(主要服务,如拨号等,是不可能被进程管理终止的,故这里只谈次要服务)
举例来说:谷歌企业套件,Gmail内部存储,联系人内部存储等。这部分服务虽然属于次要服务,但跟一些系统功能依然息息相关,我们时常需要用到它们,
所以也太希望他们被终止
4、后台进程(hidden):
后台进程的管理策略有多种:有较为积极的方式,一旦程序到达后台立即终止,这种方式会提高程序的运行速度,但无法加速程序的再次启动;
也有较消极的方式,尽可能多的保留后台程序,虽然可能会影响到单个程序的运行速度,但在再次启动已启动的程序时,速度会有所提升。
这里就需要用户根据自己的使用习惯找到一个平衡点。
5.内容供应节点(content provider):
没有程序实体,进提供内容供别的程序去用的,比如日历供应节点,邮件供应节点等。在终止进程时,这类程序应该有较高的优先权
6、空进程(empty):
没有任何东西在内运行的进程,有些程序,比如BTE,在程序退出后,依然会在进程中驻留一个空进程,
这个进程里没有任何数据在运行,作用往往是提高该程序下次的启动速度或者记录程序的一些历史信息。这部分进程无疑是应该最先终止的。
分享到:
相关推荐
### Android内存管理知识点总结 #### 一、Dalvik虚拟机及其优势 - **Dalvik虚拟机简介**:Dalvik虚拟机是Android系统的核心组件之一,它负责执行Android应用中的Java字节码。与传统的Java虚拟机(JVM)不同,Dalvik...
Android内存管理机制研究 Android内存管理机制是Android操作系统的核心组件之一,负责管理和分配移动设备的内存资源。Android内存管理机制研究是移动应用开发者和研究人员需要深入了解和掌握的知识领域。本文将深入...
以下是关于Android内存管理的深入解析: 1. **进程分类**: - **前台进程(Foreground)**:正在用户交互界面中显示或关键系统进程,如Dialer、Storage、Google Search等,具有最高优先级,一般不会被系统自动结束...
在Android应用开发中,内存管理是一项至关重要的任务,因为它直接影响到应用的性能、稳定性和用户体验。内存监控工具能够帮助开发者检测和分析应用的内存使用情况,预防和解决内存泄漏等问题。"Emmagee.apk"可能是一...
二维码简介及Android 内存管理 MAT内存分析工具
本篇文章将深入探讨Android内存管理的两个核心概念:堆(Heap)和栈(Stack),以及如何理解和解决Android内存溢出问题。 1. 堆与栈 堆和栈是Java虚拟机(JVM)中的两种主要内存区域,它们各自具有特定的用途和...
此外,多篇学术文献和技术报告也对Android系统的内存管理进行了研究和讨论,相关专业指导和参考文献也在不断增多,这为Android系统开发人员提供了丰富的学习资源和实践案例。通过不断地研究和探索,可以更好地应对...
Android内存管理是操作系统核心部分,它负责有效地分配和回收设备上的内存资源,以确保应用程序能够稳定、高效地运行。在Android系统中,内存管理采用了独特的策略,与传统的Linux内核有所不同,尤其体现在Low ...
总之,虽然Java的垃圾回收机制为内存管理提供了一定的便利,但Android应用开发者仍然需要注意正确管理内存,以避免内存泄漏的发生。通过学习和实践上述知识点,开发者可以提高编写高效且稳定的应用程序的能力。
android内存管理机制分析,帮助你了解内存管理原理,更好的开发程序
在Android开发中,内存泄漏是一个严重的问题,它会导致应用程序占用过多内存,影响性能甚至导致应用崩溃。本示例代码着重展示了如何避免Android应用中的内存...记住,良好的内存管理是提升应用性能和稳定性的重要因素。
在Android开发中,内存管理是至关重要的,因为它直接影响到应用的性能、稳定性和用户体验。本文将详细介绍如何使用各种工具进行内存管理,特别是MAT(Memory Analyzer Tool)的使用方法,并探讨防范内存溢出的有效策略...
### Android内存泄露测试详解 在Android开发中,内存管理是一项至关重要的任务,不当的内存管理会导致应用运行...例如,参考文章《Android在测试中的应用》([...,可以获取更多关于Android内存管理和测试的实用技巧...
综上所述,胡凯提出的Android内存优化的5R法则,结合了内存管理的基础知识,为Android应用的内存优化提供了一套全面的策略。开发者在实际开发过程中应该深入理解并灵活运用这些法则,以达到更佳的应用性能。
例如,如果发现某个应用的内存占用持续增长,可能表明存在内存泄漏问题,需要进一步检查应用的代码和资源管理。 在分析内存dump文件时,常用的工具有MAT (Memory Analyzer Tool)、Android Studio的内存分析器等。...
在Android开发中,内存管理是优化应用性能的关键因素。Android应用程序主要使用Java语言编写,因此其内存机制与Java内存管理有密切关系。本篇将详细探讨Android内存分析,包括内存分配、垃圾回收、内存溢出以及如何...