项目发现OOM,在设置backgroundResource的时候

adapter.getView()方法中的出错代码行(convertView已经重用):

holder.relativeLayout.setBackgroundResource(imageIDs[6-position]); // occur OOM ...


项目说明: 项目中有一个gallery里面要放7张背景图(代表七个页面),

临时解决方法

把背景图换成 小图片(480X320左右大小)


尝试方法1:

adapter里面添加:

private Bitmap currentBg = null;

再加新方法:

private void setBgForView(int index){

if(currentBg != null && (currentBg.isRecycled() == false)){

currentBg.recycle();

currentBg = null;

Drawable temp = context.getResources().getDrawable(imageIDs[index]);

currentBg = ((BitmapDrawable)temp).getBitmap();

}


然后在getView方法中添加:

setBgForView(6-position);

holder.relativeLayout.setBackgroundDrawable(new BitmapDrawable(currentBg));


结果:

02-27 16:45:36.393: E/AndroidRuntime(1466): java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@406da718
02-27 16:45:36.393: E/AndroidRuntime(1466): at android.graphics.Canvas.throwIfRecycled(Canvas.java:955)
02-27 16:45:36.393: E/AndroidRuntime(1466): at android.graphics.Canvas.drawBitmap(Canvas.java:1044)


解决方法2:

use new method:


private void getBgImage(int index ){

//注意这里没有必要手动去 currentBg.recycle();如果 调用了,会发现跟上面一样的异常

Drawable d;

try

{

currentBg = Bitmap.createBitmap(320,424,Bitmap.Config.RGB_565);

currentBg.eraseColor(0xFFFFFFFF);

Rect r = new Rect(0, 0,320 , 424);

Canvas c = new Canvas(currentBg);

Paint p = new Paint();

p.setColor(0xFFC0C0C0);

c.drawRect(r, p);

d = context.getResources().getDrawable(imageIDs[index]);

d.setBounds(r);

d.draw(c);

}

catch (Exception e){

e.printStackTrace();

}

}

然后在getView方法中调用 :

getBgImage(6-position);

holder.relativeLayout.setBackgroundDrawable(new BitmapDrawable(currentBg));



更多相关文章

  1. 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
  2. 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
  3. android下使用adb启动程序或者服务
  4. Android(安卓)Ant Build 遇到的问题
  5. Android中不用Service跨Avtivity仍然可以播放音乐的一个简单方法
  6. Android(安卓)学习笔记之二 Netspeed
  7. Android错误解决方法之:Debug certificate expired on
  8. Android(安卓)requires compiler compliance level 5.0 or 6.0.
  9. Android(安卓)dispatchTouchEvent

随机推荐

  1. 关于android安装sdk时找不到jdk的解决办
  2. Android(安卓)3.0 Hardware Acceleration
  3. Android(安卓)Handler 分析学习
  4. Android物理按键
  5. Android通讯录 字段
  6. android:View的setTag和getTag使用
  7. SeekBar 和 RatingBar
  8. Android(安卓)开机自动启动服务
  9. react-native 启动页(react-native link r
  10. Android(安卓)获取assets的绝对路径