zoukankan      html  css  js  c++  java
  • 解决一个因Bitmap引起的OOM问题

    解决一个因Bitmap引起的OOM问题

    发表于1年前(2014-09-29 23:24)   阅读(105) | 评论(0) 0人收藏此文章, 我要收藏
    0

    摘要 BitmapFactory.decodeStream引起了OutOfMemory. 在decodeStream之前,通过设置options.inJustDecodeBounds = true;让Bitmap实现虚加载。

    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;
            }
        }
    
    
    }
    
  • 相关阅读:
    用javascript实现html页面之间的参数传递
    个性的研究
    [luogu1967] 货车运输
    mscorwks.dll 没有被指定在Windows上运行,错误状态 0xc000012f
    dom4j解析xml时报:系统找不到指定路径
    The strip's most beautiful gril,rendezvous never a cover;
    无法在自定义编辑器中开发TransactSQL文件
    Default code generation is disabled for model。。。
    使用IE9艰辛历程之从什么网页都打不开到什么都秒开的传奇
    Metro IE10快捷方式 不小心删了
  • 原文地址:https://www.cnblogs.com/xiaoxiaoshen/p/5241298.html
Copyright © 2011-2022 走看看