码迷,mamicode.com
首页 > 移动开发 > 详细

android内存分析、加载本地图片内存优化

时间:2015-01-29 19:21:44      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:

从网上学习了MAT插件来查看内存使用情况,分析之后发现手上的应用对本地图片这边的内存损耗很大,查了相关资料之后发现,如果采用setImageBitmap、setImageResource这些来加载本地资源,会产生较大的损耗。因为这些方法在完成 decode 后,最终都是通过 Java 层的 createBitmap 来完成的,需要消耗更多内存。因此,改用先通过 BitmapFactory.decodeStream 方法,创建出一个 bitmap,再将其设为 ImageView 的 source,decodeStream 最大的秘密在于其直接调用 JNI>>nativeDecodeAsset() 来完成 decode,无需再使用 Java 层的 createBitmap,从而节省了 Java 层的空间。如果在读取时加上图片的 Config 参数,可以更有效的减少加载的内存,从而更有效阻止抛出内存异常。(http://www.cnblogs.com/sunzn/archive/2013/03/14/2960293.html)

之后根据实际场景采取以下优化方案:

1.对图片做适当的裁剪、降低质量。(图片大小减少了很多,但是节省内存效果一般,堆占用从3M减少到2m)

2.因为使用场景是这张图片是一张大的背景图,在不知道setImageResource会产生比较大消耗的时候想出了把图片传到web上,利用加载图片的第三方库来加载的办法。

3.在查找资料了解了产生消耗的原因时,采取了decodeStream的办法,效果显著,减少到几十k。

InputStream is = this.getResources().openRawResource(R.drawable.bg_header_dynamic);
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = false;
options.inPreferredConfig = Bitmap.Config.RGB_565;  
options.inPurgeable = true;  
options.inInputShareable = true; 
options.inSampleSize = 1;
Bitmap btp =BitmapFactory.decodeStream(is,null,options);
im_bg.setImageBitmap(btp);

优化前技术分享

优化后技术分享

android内存分析、加载本地图片内存优化

标签:

原文地址:http://www.cnblogs.com/huanciyuan/p/4260492.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!