Bootstrap

Android中的内存管理

1.内存管理机制概述

1.分配机制:

安卓系统会为每个进程合理的分配内存,从而保证每个进程能正常运行。而不至于内存不够使用或者每个进程占用太多的内存。

2.回收机制

操作系统在内存不足的时候,它会有一个合理的回收和再分配的机制。

从而保证新的进程能够正常运行。回收的时候就可能杀死那些正在占用内存的进程。所以操作系统需要有一个合理的杀死占用内存的进程的机制,以保证把副作用降到最低。

二。安卓内存管理机制

1.分配机制

安卓采用弹性内存分配机制。也就是说一开始并不会分配太多的内存。而是给每一个APP的进程分配一个小额的量。这个小额的量跟手机的内存大小有关。

当进程内存不够的时候,安卓会再分配一些内存给各个进程。但是这个内存大小不是随意的,他是有限度的。操作系统也想让更多的进程存活。这样用户打开进程的时候不用重新创建,只用恢复就行。

2.回收机制

安卓对于进程的分类是有优先级的。对进程进行了分类,主要分为这样5大类。

1.前台进程

也就是在屏幕当前显示的进程

2.可见进程

可见进程也就是说,前台进程他已经不再属于前台了。但是用户仍能看到的进程。

3.服务进程

开启一些服务,比如推送,定位等等。

4.后台进程

后台进程不同于服务进程。他会在后台进行一些计算。

5.空进程

没有任何东西在运行的进程。内存可以随时把他回收掉。

那么安卓为什么要搞这个分级呢?因为级别越低,被系统杀死回收的可能性越大。

这里我们注意,前台进程,可见进程,服务进程,正常情况下他是绝对不会被杀死和回收的。

而后台进程存到一个缓存列表中,这个缓存列表是LRU结构,也就是最近最少使用。

而空进程是为了平衡整个系统性。安卓不会保存这个进程。

安卓在开始杀死进程的时候,系统会判断杀死这个进程所带来的效益。

安卓总是更倾向于杀死能回收更多内存的进程。

三。内存管理机制的特点

我们可以理解为系统的内存管理目标

1、占用更少的内存

2、在合适的时候,合理的释放内存资源。

3.在系统内存紧张的情况下,能释放掉大部分不重要的资源。来为android系统提供可用的内存。

4.能够很合理的在特殊生命周期中,保存或者还原重要数据,以至于系统能够正确的重新恢复该应用。

四。内存优化的方法

1.当service完成后,尽量停止他。

可以用intentservice代替service。

因为intentservice可以在intenthandler方法中执行耗时任务,而且在运行完成后,会自动退出。

2.在UI不可见的时候,释放掉一些只有UI使用的资源。

3.在系统内存紧张的时候,尽可能多的释放掉一些非重要的资源。

4.避免滥用Bitmap造成的内存浪费。

5.使用针对内存优化过的数据容器。

6.避免使用依赖注入的框架。

7.使用zip对齐的APK

8.使用多进程。

;