能力值:
( LV2,RANK:10 )
|
-
-
2 楼
处理图像最容易OOM的~因为Android对每个Dalvik虚拟机是有内存限制到,好像是16M,程序中图片又是相当耗内存的,不调整精度,动不动就会OOM的~ 解决办法百度一大堆,给你一个官方的处理方式:592K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3c8W2N6X3g2D9L8%4m8W2M7W2)9J5k6h3q4F1k6s2u0G2K9h3c8Q4x3X3g2U0L8$3#2Q4x3V1k6@1M7X3q4A6L8X3W2F1k6#2)9J5c8X3c8A6M7%4m8D9j5i4W2A6L8X3N6Q4x3X3c8T1K9i4c8E0j5i4m8K6i4K6u0r3L8r3!0S2k6q4)9J5k6r3u0A6N6r3#2S2M7q4)9J5k6h3S2@1L8h3H3`.
旁边还有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;
}
|
|
|