Android 的内存管理简介
Android 和Android 内存管理基本介绍
Android 内核是基于Linux 2.6 内核的(目前最新开发版本是2.6.31),它是一个增
强内核版本,除了修改部分Bug 外,它提供了用于支持Android 平台的设备驱动,其核
心驱动主要包括:
Android Binder ,基于OpenBinder 框架的一个驱动,用于提供Android 平台的进程
间通讯(IPC,inter-process communication)。源代码位于
drivers/staging/Android/binder.c
Android 电源管理(PM),一个基于标准Linux 电源管理系统的轻量级的Android 电
源管理驱动,针对嵌入式设备做了很多优化。源代码位于kernel/power/earlysuspend.c
kernel/power/consoleearlysuspend.c kernel/power/fbearlysuspend.c
kernel/power/wakelock.c kernel/power/userwakelock.c
低内存管理器(Low Memory Killer),相对于Linux 标准OOM (Out Of Memory)
机制更加灵活,它可以根据需要杀死进程来释放需要的内存。 源代码位于
drivers/staging/Android/lowmemorykiller.c
匿名共享内存(ashmem),为进程间提供大块共享内存,同时为内核提供回收和管
理这个内存的机制。源代码位于mm/ashmem.c
Android PMEM (Physical),PMEM 用于向用户空间提供连续的物理内存区域,DSP
和某些设备只能工作在连续的物理内存上。 源代码位于drivers/misc/pmem.c
Android Logger ,一个轻量级的日志设备,用于抓取Android 系统的各种日志。源
代码位于drivers/staging/Android/logger.c
Android Alarm ,提供了一个定时器用于把设备从睡眠状态唤醒,同时它也提供了一
个即使在设备睡眠时也会运行的时钟基准,源代码位于drivers/rtc/alarm.c
USB Gadget 驱动 ,一个基于标准Linux USB gadget 驱动框架的设备驱动,Android
的USB 驱动是基于gaeget 框架的,源代码位于drivers/usb/gadget/
Android Ram Console ,为了提供调试功能,Android 允许将调试日志信息写入一个
被称为RAM Console 的设备里,它是一个基于RAM 的Buffer。 源代码位于
drivers/staging/Android/ram_console.c。
每个Android 应用都运行在一个单独的进程在它自己的Dalvik 的实例,负责所有的
Android 运行时的内存和进程管理的责任,停止和死亡过程的必要的管理资源。
Dalvik 和Android 运行时间在一个Linux 内核,处理低层次的硬件交互,包括驱动程
序和内存管理,其API 提供下层的服务,功能,和硬件的访问。
Dalvik 虚拟机是基于寄存器的虚拟机的优化,以确保设备可以有效地运行多个实例。
它依赖于Linux 内核线程和低级的内存管理。
Dalvik 虚拟机
Android 的关键要素之一是Dalvik 虚拟机。 而不是使用传统的Java虚拟机(VM)中,
如Java ME (Java移动版),Android 使用自己的定制设计,以确保有效地在单个设备上
运行多个实例的虚拟机。
Dalvik 虚拟机,使用Linux 内核处理低级别的功能,包括安全,线程,进程和内存管理。
所有的Android硬件和系统服务的访问的管理使用作为中间层的Dalvik。通过使用一个
虚拟机,主机应用程序的执行,开发人员有一个抽象层,以确保他们从来没有担心一个
特定的硬件实现。
Dalvik 虚拟机执行的Dalvik 可执行文件格式,优化,以确保最小的内存足迹。 改造
Java语言编译后的类的使用在SDK提供的工具创建.dex可执行文件。
理解应用优先级和过程状态
下面的列表详细介绍每一个如图所示的应用程序状态,并解释如何取决于应用程序组件,
包括它的状态是:
活动进程的活动(前台)进程是那些目前与用户交互的组件宿主应用程序。这些都是
Android 是试图保持响应回收资源的过程。通常有极少数的这些过程,他们将只作为最
后的手段杀害。
活动进程包括:
1 活动中的一个“活跃”状态,也就是说,他们在前台和响应用户事件。 您将探索在
更详细的活动状态,在本章后面。
2 活动,服务或广播接收机,当前正在执行的onReceive 事件处理程序。
3 服务正在执行一个缓动的onCreate,或OnDestroy 事件处理程序。
可见进程可见,但处于非活动状态的进程是那些主办的“看得见”的活动。顾名思义,
可见活动是可见的,但他们不是在前台或响应用户事件。这发生在一个活动仅是部分遮
蔽(非全屏或透明的活动)。通常有很少的可见的进程,他们将只在极端情况下被杀害,
让活动的进程继续。
启动的服务进程的进程已经启动的托管服务。服务支持正在进行的处理,应继续没有
明显的界面。因为服务不直接与用户交互,他们收到一个稍微较低的优先级比可见光活
动。他们仍然被认为是前台进程,并不会被杀死,除非活动或可见的进程所需要的资源。
后台进程的进程举办活动是不可见的,并没有任何被认为是后台进程已经启动的服务。
一般将有大量的后台进程,Android 将杀死最后一个看到的第一个死亡的图案获得前台进
程的资源。
空流程提高了整体系统性能的Android 经常在内存中保留的申请后,他们达成的结束其
一生。 Android 维护这个缓存的提高应用程序的启动时间时,他们再次推出。这些过
程是柔tinely杀害。
How to use memory efficiently 如何有效地使用内存
Android 的管理打开的应用程序是在后台运行,所以你不应该关闭这个。同时这意味着,
关闭应用程序时,系统需要更多的内存。然而,大多数Android 用户不是很满意,它的
东西它是如何,因为有时留下太多的进程运行,从而导致在日常生活中表现呆滞。我们
可以利用先进的任务杀手/任务管理器和它的工作非常好。