软件实现——第二组

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

1、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内核线程和低级的内存管理。 

 2、 Dalvik虚拟机  

 Android的关键要素之一是Dalvik虚拟机。 而不是使用传统的Java虚拟机(VM)中,如Java ME(Java移动版),Android使用自己的定制设计,以确保有效地在单个设备上

运行多个实例的虚拟机。   Dalvik虚拟机,使用Linux内核处理低级别的功能,包括安全,线程,进程和内存管理。  所有的Android硬件和系统服务的访问的管理使用作为中间层的

Dalvik。  通过使用一个虚拟机,主机应用程序的执行,开发人员有一个抽象层,以确保他们从来没有担心一个特定的硬件实现。   Dalvik虚拟机执行的Dalvik可执行文件格式,优

化,以确保最小的内存足迹。 改造Java语言编译后的类的使用在SDK提供的工具创建.dex可执行文件。 

3、 理解应用优先级和过程状态

下面的列表详细介绍每一个如图所示的应用程序状态,并解释如何取决于应用程序组件,

包括它的状态是:  
 

活动进程的活动(前台)进程是那些目前与用户交互的组件宿主应用程序。 这些都是Android是试图保持响应回收资源的过程。 通常有极少数的这些过程,他们将只作为最

后的手段杀害。  活动进程包括: 

一、 活动中的一个“活跃”状态,也就是说,他们在前台和响应用户事件。 您将探索在

更详细的活动状态,在本章后面。  

二、  活动,服务或广播接收机,当前正在执行的onReceive事件处理程序。  

三、  服务正在执行一个缓动的onCreate,或OnDestroy事件处理程序。  

可见进程可见,但处于非活动状态的进程是那些主办的“看得见”的活动。  顾名思义,可见活动是可见的,但他们不是在前台或响应用户事件。 这发生在一个活动仅是部分遮

蔽(非全屏或透明的活动)。  通常有很少的可见的进程,他们将只在极端情况下被杀害,让活动的进程继续。 启动的服务进程的进程已经启动的托管服务。 服务支持正在进行的

处理,应继续没有明显的界面。 因为服务不直接与用户交互,他们收到一个稍微较低的优先级比可见光活动。  他们仍然被认为是前台进程,并不会被杀死,除非活动或可见的进程

所需要的资源。   后台进程的进程举办活动是不可见的,并没有任何被认为是后台进程已经启动的服务。  一般将有大量的后台进程, Android将杀死最后一个看到的第一个死亡的

图案获得前台进程的资源。  空流程提高了整体系统性能的Android经常在内存中保留的申请后,他们达成的结束其一生。  Android维护这个缓存的提高应用程序的启动时间时,他

们再次推出。 这些过程是柔tinely杀害。  

4、 How to use memory efficiently 如何有效地使用内存   

 Android 的管理打开的应用程序是在后台运行,所以你不应该关闭这个。 同时这意味着,关闭应用程序时,系统需要更多的内存。 然而,大多数Android 用户不是很满意,它的

东西它是如何,因为有时留下太多的进程运行,从而导致在日常生活中表现呆滞。 我们可以利用先进的任务杀手/任务管理器和它的工作非常好。  

posted on 2012-04-05 21:38  软件实现——第二组  阅读(320)  评论(0编辑  收藏  举报