Android之内存优化(一)

来源:互联网 发布:淘宝骑行头盔哪家靠谱 编辑:程序博客网 时间:2024/05/21 10:31

      本文内容主要是总结其他人的观点 ,加上自己的一些理解,整理出来的,有兴趣的朋友可以参考下。

       我们先来看一个Android内存优化经常遇到的名词----OOM(内存泄漏),

      内存泄露可以引发很多的问题:

1.程序卡顿,响应速度慢(内存占用高时JVM虚拟机会频繁触发GC(垃圾回收))

2.莫名消失(当你的程序所占内存越大,它在后台的时候就越可能被干掉。反之内存占用越小,在后台存在的时间就越长)

3.直接崩溃(OutOfMemoryError)

    ANDROID内存面临的问题:

1.有限的堆内存,原始只有16M

2.内存大小消耗等根据设备,操作系统等级,屏幕尺寸的不同而不同

3.程序不能直接控制

4.支持后台多任务处理(multitasking)

5.运行在虚拟机之上

6.应用程序越做越大,功能越来越复杂,对Android内存分配要求越来越高。

   解决办法:(其实个人觉得如果Android底层内存分配机制不修改,开发者做的内存优化是很有限的,对于小一点的程序几乎没啥影响)本文主要通过5R的方法进行优化。

1.Reckon(计算)

首先需要知道你的app所消耗内存的情况,知己知彼才能百战不殆

2.Reduce(减少)

消耗更少的资源

3.Reuse(重用)

当第一次使用完以后,尽量给其他的使用

5.Recycle(回收)

返回资源给生产流

4.Review(检查)

回顾检查你的程序,看看设计或代码有什么不合理的地方。

(一)Reckon计算内存消耗,这个肯定不是让你自己去计算,一般我们利用一些第三方软件,现在狠多软件都可以解决这个问题,就不多说了,接着对于内存消耗非常大的应用程序,不用的可以删除清理,或者强行停止。

(二) Reduce(减少),意思就是减少程序的内存消耗。在这里我们重点要 讲下bitmap图片的优化,图片的加载处理不当,简直就是在吃内存,我曾经试过 将一张高清图片作为一个本身大小只有10M不到的应用的背景图片,结果,打开程序又慢有卡,进去切换的时候更是卡的不行。那么我们 如何去 处理图片的加载问题呢?这里 提供几点参考,

(1)按需加载,不加载高清的时候尽量不加载,能加载缩略图尽量缩略图;

(2)加载高清大图时,请使用二次采样的方式加载,千万不要一次性加载出整图;

(3)自定义加载图片的View,当然加载原理和二次采样一样,还是要进行二次采样操作。

(4)图片像素问题,Android中图片有四种属性,分别是:ALPHA_8:每个像素占用1byte内存 ,ARGB_4444:每个像素占用2byte内存 ,ARGB_8888:每个像素占用4byte内存 (默认),RGB_565:每个像素占用2byte内存 ,推荐要求不是很高的情况下,使用RGB_565像素。

(5)使用Bitmap过后,就需要及时的调用Bitmap.recycle()方法来释放Bitmap占用的内存空间,而不要等Android系统来进行释放。

(6)如果出现OOM异常,又不想让你程序直接崩掉,那就捕获OOM异常吧。

   好了,今天就总结到这了。


0 0
原创粉丝点击