Android-Bitmap高效加载避免OOM
来源:互联网 发布:机器人编程语言py 编辑:程序博客网 时间:2024/06/12 21:30
在实际的项目开发过程中,因为手机内存有限,加载图片过程中经常会发生oom的问题,因此,如何避免oom成了android开发过程中必不可少的一个环节。需要使用到BitmapFactory中的一个强大的工具:
BitmapFactory.Options
通过计算采样率等比例压缩bitmap图片的宽高。从而达到避免oom的情况。刚提到采样率:
inSampleSize
这又是一个神奇的东西,通过采样率可以设置图片缩放的比例,默认值为1。当采样率为2事,图片的宽高为原来的1/2,像素比为原来的1/4。例如一张图片大小的4m,设置采样率为2的话图片大小将会缩小到1m,宽高也是等比缩小一半。
inJustDecodeBounds
这个关键参数是一个boolean类型,为true的时候的意思是代表加载图片不会计入内存,只是用于计算图片的宽高,设置成false才是实际加载图片。
因此实际的代码操作就是:
public class BitmapOptionActivity extends AppCompatActivity { private ImageView icon; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_bitmap_option); icon = (ImageView) findViewById(R.id.icon); Bitmap bitmap = bitmapOption(getResources(), R.mipmap.danfan, 50, 50); icon.setImageBitmap(bitmap); } /** * 压缩指定尺寸图片 * @param res * @param resId * @param reqWidth * @param reqheight * @return */ private Bitmap bitmapOption(Resources res , int resId, int reqWidth, int reqheight) { BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds=true; BitmapFactory.decodeResource(res,resId,options); int height = options.outHeight; int width = options.outWidth; //指定采样率 int inSampleSize=1; if(height>reqheight||width>reqWidth){ int halfWidth = width/2; int halfHeight = height/2; //采样率以2的指数幂增长 while((halfWidth/inSampleSize)>=reqWidth&&(halfHeight/inSampleSize)>=reqheight){ inSampleSize*=2; } } //设置采样率 options.inSampleSize=inSampleSize; options.inJustDecodeBounds=false; return BitmapFactory.decodeResource(res,resId,options); }}
主要是采样率的计算里面有一些技巧,判断如果实际大小大于需要设置的大小,就将实际大小除2,在进行比较,直到实际大小满足条件,然后设置采样率。
1 0
- Android-Bitmap高效加载避免OOM
- Android高效加载OOM异常避免OOM
- android 高效加载大图片,避免OOM
- Android 高效加载大图片避免OOM
- Android高效加载位图避免OOM
- Android 高效加载大图片避免OOM
- Android 高效加载大图片避免OOM
- Bitmap.Options和LruCache——Android高效加载大图、多图解决方案,有效避免程序OOM
- 高效加载图片,避免OOM
- Android高效加载图片,有效避免程序OOM
- Android高效加载图片,有效避免程序OOM
- Android高效加载图片,有效避免程序OOM
- Android高效加载图片,有效避免程序OOM
- ANDROID高效加载图片,有效避免程序OOM
- Android高效加载大图、多图避免程序OOM
- Android 优化Bitmap避免OOM
- 如何高效的加载大图,避免oom
- Android高效加载Bitmap
- BackTrack-----找出一个集合的所有子集(78. Subsets)
- LVS中文手册
- 登录短信验证实现
- HAUTOJ 1269 爱看电视的LsF
- 性能指标、性能测试的一些概念以及性能调优
- Android-Bitmap高效加载避免OOM
- myeclipse连接mysql数据库
- jq插件的编写中(jquery.extend、jquery.fn与jquery.fn.extend的使用区别)
- 排序算法之冒泡排序
- [LeetCode] Excel Sheet Column Number 字符串转数字
- Hibernate5学习笔记(五)
- 12 WebGL移动、旋转和缩放中的平移
- android插件化(AMS Hook)
- Linux strace命令