我在OnCreate上通过此代码使用Picasso设置了我的Imageview图像:
ivLogo = (ImageView) findViewById(R.id.backimage);
Picasso.with(getApplicationContext()).load(R.drawable.background).fit()
.into(ivLogo);
并在On OnDestroy功能中循环使用:
((BitmapDrawable)ivLogo.getDrawable()).getBitmap().recycle();
我必须回收我的Imageview以避免OutOfMemory错误。
但是当我通过这段代码从另一个回到这个活动时:
Intent it = new Intent(WorldChose.this, MainMenu.class);
// it.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(it);
overridePendingTransition(R.anim.from_middle, R.anim.to_middle);
finish();
我收到此错误:
09-19 15:04:32.465: E/AndroidRuntime(2112): java.lang.IllegalArgumentException: Cannot draw recycled bitmaps
答案 0 :(得分:0)
您无法使用回收位图。似乎你正在这样做。首先,您要回收位图,然后当用户回到活动时,您就会想要使用它。
来自文档:
警告:只有在确定时才应使用recycle() 不再使用位图。如果您调用recycle()及更高版本 尝试绘制位图,你会得到错误:“画布:试图 使用回收的位图“。
编辑:在Android 3.0及更高版本上,没有太多理由可以调用回收。 (阅读文档)
答案 1 :(得分:0)
首先,根据您的代码,实际上您为Bitmap对象调用了recycle方法。
其次,一旦你回收了一个位图,它就不能再使用了,你可以检查源代码:
private void checkRecycled(String errorMessage) {
if (mRecycled) {
throw new IllegalStateException(errorMessage);
}
}
这是Bitmap源代码中的代码片段,首先会在大多数Bitmap操作方法中调用它。
最后也就是说,如果OS API级别高于11,则回收方法实际上对内存回收无效。