首页 > 代码库 > android内存分析、加载本地图片内存优化
android内存分析、加载本地图片内存优化
从网上学习了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内存分析、加载本地图片内存优化
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。