android加载大图滑动浏览OOM异常解决
来源:互联网 发布:mysql转换日期格式 编辑:程序博客网 时间:2024/06/02 00:58
人(鄙)狠(人)话(非)不(常)多(懒),直接上代码!
private LruCachemLruCache;private void setLruCache() { if (mLruCache == null) { mLruCache = LruCacheUtils.getBitmapCache(); } //定义之前一定要先清理缓存,只存当前浏览图片的上一张和下一张 mLruCache.evictAll(); //获取当前图片的上一张图片路径,假如加入缓存 String lastPicPath = mPicList.get(Math.abs(mCurrentPosition - 1)).toString(); String nextPicPath = null; Log.d(TAG, "current position: " + mCurrentPosition); //获取当天图片的下一张图片路径,加入缓存 nextPicPath = mPicList.get(mCurrentPosition - 1).toString(); mLruCache.put(nextPicPath, getZoomBitmap(nextPicPath)); mLruCache.put(lastPicPath, getZoomBitmap(lastPicPath));}public static Bitmap getZoomBitmap(String srcPath) { try { Bitmap bmp = mImageUtils.getImage(srcPath); if (bmp != null) { return bmp; } BitmapFactory.Options newOpts = new BitmapFactory.Options(); newOpts.inJustDecodeBounds = true; BitmapFactory.decodeStream(new FileInputStream(srcPath), null, newOpts); int scale = calculateInSampleSize(newOpts.outWidth, newOpts.outHeight); Log.i(TAG, scale + "scale"); newOpts.inSampleSize = scale; newOpts.inJustDecodeBounds = false; return BitmapFactory.decodeStream( new FileInputStream(srcPath), null, newOpts); } catch (FileNotFoundException e) { e.printStackTrace(); return null; }}public static int calculateInSampleSize(int outWidth, int outHeight) { int inSampleSize = 1; if (outWidth > outHeight && outWidth > 280f) { inSampleSize = (int) (outWidth / 280f); } else if (outWidth < outHeight && outHeight > 280f) { inSampleSize = (int) (outHeight / 280f); } else if (outWidth == outHeight && outHeight > 280f) { inSampleSize = (int) (outHeight / 280f); } if (inSampleSize <= 0) { inSampleSize = 1; } Log.e(TAG, "inSampleSize = " + inSampleSize); return inSampleSize; }/** * 浏览当前图片,获取裁剪后的缓存图片 */ private Bitmap getBitmap2Cache(Uri picUri) { if (mLruCache == null) { mLruCache = LruCacheUtils.getBitmapCache(); } Bitmap picBitmap = mLruCache.get(picUri.toString()); if (picBitmap != null) { mImageSwitcher.setImageDrawable(new BitmapDrawable(picBitmap)); } else { mImageSwitcher.setImageDrawable(new BitmapDrawable(getZoomBitmap(picUri.toString()))); } return picBitmap; }/** * 举一个向左滑动的例子 */private void leftSlide() { setLruCache(); //动画 mImageSwitcher.setInAnimation(AnimationUtils.loadAnimation( getApplication(), R.anim.right_in)); mImageSwitcher.setOutAnimation(AnimationUtils.loadAnimation( getApplication(), R.anim.left_out)); mCurrentPosition--; Uri uri = Uri.parse(mPicList.get(mCurrentPosition).toString()); getBitmap2Cache(uri); setTime(uri.toString()); mCount.setText(mLength - mCurrentPosition + "/" + mPicList.size()); setSwitchIcon(mCurrentPosition);}
Lrucache是android的标准,防止OOM用这个最好不过了。
阅读全文
1 0
- android加载大图滑动浏览OOM异常解决
- Android加载大图片OOM异常解决
- Android加载大图片OOM异常解决
- 【OOM】Android加载大图片OOM异常解决
- Android加载大图片时的OOM异常及解决(图片的二次采样)
- 加载大图,解决oom问题
- Android 加载大图片造成OOM异常解决方法
- Android中加载大图片放置OOM异常
- Android大图加载,缩放,滑动浏览--SubsamplingScaleImageView 源码分析<一>大图加载
- android解决加载大图片卡顿和oom问题。
- android加载大图,防止oom
- Android加载大图避免OOM
- Android加载大图OOM问题
- Android 加载大图不会OOM
- BitmapFactory.Options 解决加载大图片OOM
- 解决加载大图片oom处理
- BitmapFactory.Options 解决加载大图片OOM
- BitmapFactory.Options 解决加载大图片OOM
- 数字加密
- Error LNK2001 无法解析的外部符号 的几种情况及解决办法
- CSDN-markdown编辑器
- bootstrap的datepicker在选择日期后调用某个方法
- Java VisualVM 插件地址
- android加载大图滑动浏览OOM异常解决
- Java并发解决方案 java.util.concurrent
- 【清北学堂】dwarf
- STORM入门之(集成KafkaSpout)
- Object.create()详解
- linux平台下防火墙iptables原理
- SpringMVC配置全局日期转换器
- 【POJ-2407】Relatives
- @Resource和@Autowired区别