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.使用多进程。