加载大图及图片资源的释放
来源:互联网 发布:ncbi数据库简介 编辑:程序博客网 时间:2024/04/29 14:37
android开发中如果加载一张较大的图片直接内存爆炸,我也是头疼了好长时间,以下是我找到的的解决方案。
完整解决方案地址:https://my.oschina.net/u/1389206/blog/324731
设置 读取图片的参数,使用decodeStream进行图片读取。
尽量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResource来设置一张大图,因为这些函数在完成decode后,最终都是通过java层的createBitmap来完成的,需要消耗更多内存。 因此,改用先通过BitmapFactory.decodeStream方法,创建出一个bitmap,再将其设为ImageView的 source,decodeStream最大的秘密在于其直接调用JNI>>nativeDecodeAsset()来完成decode,无需再使用java层的createBitmap,从而节省了java层的空间。
使用方式:
public static Bitmap readBitMap(Context context, int resId) { BitmapFactory.Options opt = new BitmapFactory.Options(); opt.inPreferredConfig = Bitmap.Config.RGB_565; opt.inPurgeable = true; opt.inInputShareable = true; // 获取资源图片 InputStream is = context.getResources().openRawResource(resId); return BitmapFactory.decodeStream(is, null, opt); }
对于RGB565的说明:http://blog.csdn.net/xiaoyaovsxin/article/details/8446698
使用完资源后在ondestroy进行释放:
protected void onDestroy() { //BitmapDrawable drawable= (BitmapDrawable) layout.getBackground();
//Bitmap bitmap=drawable.getBitmap();
//先取得图片资源再调用一下内容if(bitmap!=null&&!bitmap.isRecycled()) { bitmap.recycle(); bitmap=null; drawable=null; } System.gc(); super.onDestroy(); }
0 0
- 加载大图及图片资源的释放
- Android加载大图片时的OOM异常及解决(图片的二次采样)
- Android ListView,Gridview动态加载释放图片资源
- Android中加载高清大图及图片压缩方式
- javascript图片加载---加载大图的一个解决方案
- c#释放已经加载的图片
- C#如何释放已经加载的图片
- C#如何释放已经加载的图片
- android图片:高效加载大图
- 加载网络图片显示大图
- 图片懒加载及资源节流
- android 加载大图片时计算图片的缩放比例
- 图片处理,如何避免大图片加载的OOM
- Android中高效的显示图片 - 加载大图
- Android中高效的显示图片 - 加载大图
- android 超强大的图片选择器,支持超大图加载
- 托管与非托管资源介绍及 资源的释放
- Unity 资源加载释放相关
- uva 10422Knights in FEN
- 树状数组
- Linux中的权限发布啦!
- 如何在 Linux 上录制你的终端操作
- E. A rectangle
- 加载大图及图片资源的释放
- 网络编程基本理论知识
- MySQL之——如何添加新数据库到MySQL主从复制列表
- Eclipse javaweb项目无法发布到tomcat服务器上
- 在ubuntu16.04上配置cvs
- LeetCode——6. ZigZag Conversion
- 并查集----The Suspects
- 标题栏的滑动隐藏和显示是怎么实现的?
- POJ3009 Curling 2.0(DFS)