能力值:
( LV2,RANK:10 )
|
-
-
2 楼
处理图像最容易OOM的~因为Android对每个Dalvik虚拟机是有内存限制到,好像是16M,程序中图片又是相当耗内存的,不调整精度,动不动就会OOM的~ 解决办法百度一大堆,给你一个官方的处理方式:http://developer.android.com/training/displaying-bitmaps/load-bitmap.html
旁边还有google的sample
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
一直以来,碰上图片导致的OOM都是通过软引用+图片缩放来完成的,图片缩放大致就是用 BitmapFactory.Option设置 inSimpleSize,然后用BitmapFactory来产生图片,记得及时recyle,也可以通过软引用 SoftReference 来完成,具体的百度上有文章的
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
OOM问题图片缩放,但要注意同一张图片多处引用问题,最好在每个页面加载时set,ondestroy时释放。
//生成对象
public Drawable getResourceDrawable(int rid) {
return new BitmapDrawable(BitmapFactory.decodeStream(mContext
.getResources().openRawResource(rid)));
}
//释放
public void reCycleBitmapDrawable(View iv) {
Bitmap bt = null;
if (iv == null) {
return;
}
if (iv.getBackground() == null) {
return;
}
iv.getBackground().setCallback(null);
iv.unscheduleDrawable(iv.getBackground());
bt = ((BitmapDrawable) iv.getBackground()).getBitmap();
if (bt != null && !bt.isRecycled()) {
bt.recycle();
bt = null;
}
iv.setBackgroundDrawable(null);
iv = null;
}
//每个界面调用时采用
***.setBackgroundDrawable(getResourceDrawable(R.drawable.***));
//ondestroy时释放
if (***!= null) {
reCycleBitmapDrawable(***);
***= null;
}
|
|
|