解决一个因Bitmap引起的OOM问题
2016-03-04 10:56
246 查看
解决一个因Bitmap引起的OOM问题
发表于1年前(2014-09-29 23:24) 阅读(105) | 评论(0) 0人收藏此文章, 我要收藏赞0
摘要 BitmapFactory.decodeStream引起了OutOfMemory. 在decodeStream之前,通过设置options.inJustDecodeBounds = true;让Bitmap实现虚加载。
Bitmap OutOfMemory
BitmapFactory.decodeStream引起了OutOfMemory.
在decodeStream之前,通过设置options.inJustDecodeBounds = true;让Bitmap实现虚加载。
设置options.inJustDecodeBounds = true;让Bitmap实现虚加载。
使用options.outWidth和options.outHeight获取图片宽和高。
再使用ImageLoader.getInstance().displayImage加载图片。
public class PhotoViewFragment extends Fragment { private PhotoView mGestureImageView; private Bitmap mBitmap; @Override public View onCreateView(LayoutInflater inflater, final ViewGroup container, Bundle savedInstanceState) { View inflateView = inflater.inflate(R.layout.fragment_photo_view_show, container, false); mGestureImageView = (PhotoView) inflateView.findViewById(R.id.image_turn_show_gestureImageView); getBundleData(); try { /*减少内存占用*/ BitmapFactory.Options opt = new BitmapFactory.Options(); opt.inPreferredConfig = Bitmap.Config.RGB_565; opt.inPurgeable = true; opt.inInputShareable = true; opt.inJustDecodeBounds = true;//虚加载 FileInputStream fis = new FileInputStream(Environment.getExternalStorageDirectory() + File.separator + "abc.png"); mBitmap = BitmapFactory.decodeStream(fis, null, opt); int width = opt.outWidth; int height = opt.outHeight; if (height / width >= 1.6) {//判断横竖图 mGestureImageView.setScaleType(ImageView.ScaleType.CENTER_CROP); } else { mGestureImageView.setScaleType(ImageView.ScaleType.FIT_CENTER); } DisplayImageOptions op = new DisplayImageOptions.Builder() .cacheInMemory(true) // default .build(); Uri uri = Uri.fromFile(new File(Environment.getExternalStorageDirectory() + File.separator + "abc.png")); ImageLoader.getInstance().displayImage(uri.toString(), mGestureImageView, op); } catch (Exception e) { Log.e("Fragment", "onCreateView image-view", e); } return inflateView; } /** * 重置GestureImageView为原大小 */ public void resetGestureImageView() { mGestureImageView.reset(); } /** * 获得Bundle */ private void getBundleData() { Bundle bundle = getArguments(); } @Override public void onPause() { super.onPause(); mGestureImageView.reset(); } @Override public void onDestroy() { super.onDestroy(); if (mBitmap != null && !mBitmap.isRecycled()) { mBitmap.recycle(); mBitmap = null; } } }
相关文章推荐
- Solr技巧 -- 仿“竞价排名”
- android的数据存储方式------5种
- cocospod 安装和使用
- EasyUI Layout 布局
- PHP使用curl模拟post上传及接收文件的方法
- iOS开发 判断输入语言是否是汉语
- html笔试题
- 打包遇到错误:missing ios distribution signing identity for XXXXXXXXXX
- VS敲C++代码时遇到的Bug总结
- Java LinkedList双向链表源码分析
- API升级 PaddingStart 与 Padding End 过期解决办法
- 输入域名,localhost,直接跳转到controller的几种方式:
- 高效使用Bitmaps(一) 大Bitmap的加载
- 评论PK投票功能的手机版
- 浅拷贝&深拷贝
- Spring学习必备知识之抽象工厂模式
- UI动画架构(上下滚动,里面View可以实现动画<透明,移动,缩放,变色>l)
- lucencen原理解析
- python os.execl记录下遇到的传参问题
- ural 2070. Interesting Numbers