Android imageview的回收和重用
在MainActivity中,我使用毕加索在OnCreate上通过以下代码设置Imageview的图像:Android imageview的回收和重用,android,imageview,Android,Imageview,在MainActivity中,我使用毕加索在OnCreate上通过以下代码设置Imageview的图像: ivLogo = (ImageView) findViewById(R.id.backimage); Picasso.with(getApplicationContext()).load(R.drawable.background).fit() .into(ivLogo); 并在OnDestroy功能中循环: ((BitmapDrawable)ivL
ivLogo = (ImageView) findViewById(R.id.backimage);
Picasso.with(getApplicationContext()).load(R.drawable.background).fit()
.into(ivLogo);
并在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
您不能使用回收的位图。看来你正在这么做。首先要循环使用位图,然后在用户返回活动时使用它 从文件: 注意:只有在确定 位图不再使用。如果调用recycle()及更高版本 尝试绘制位图时,会出现错误:“Canvas:正在尝试 使用回收的位图”
编辑:在安卓3.0及更高版本上,没有太多理由称其为回收。(阅读文档)您不能使用回收的位图。看来你正在这么做。首先要循环使用位图,然后在用户返回活动时使用它 从文件: 注意:只有在确定 位图不再使用。如果调用recycle()及更高版本 尝试绘制位图时,会出现错误:“Canvas:正在尝试 使用回收的位图”
编辑:在安卓3.0及更高版本上,没有太多理由称其为回收。(阅读文档)首先,根据您的代码,实际上您调用了位图对象的回收方法 其次,一旦回收位图,它就不能再使用了,您可以检查源代码:
private void checkRecycled(String errorMessage) {
if (mRecycled) {
throw new IllegalStateException(errorMessage);
}
}
这是位图源代码中的代码片段,大多数位图操作方法都会首先调用它
最后也是最重要的一点,如果操作系统API级别高于11,回收方法实际上对内存回收没有任何作用。首先,根据您的代码,实际上您为位图对象调用了回收方法 其次,一旦回收位图,它就不能再使用了,您可以检查源代码:
private void checkRecycled(String errorMessage) {
if (mRecycled) {
throw new IllegalStateException(errorMessage);
}
}
这是位图源代码中的代码片段,大多数位图操作方法都会首先调用它
最后也是最重要的一点,如果操作系统API级别高于11,则recycle方法实际上与内存回收无关。我想在回收并完成该活动后重新使用imageview,为什么不可能,它与从一开始就运行一个活动是一样的,不是吗?你说的是重新使用imageview,但实际上,回收方法仅适用于位图。如果你回收位图,这意味着在应用程序完全销毁并重新打开之前,你将不再使用它。因此,您所做的与从头开始运行不同。我想在循环并完成该活动后重用imageview,为什么不可能,它与从头开始运行活动相同,不是吗?您说的是重用imageview,但实际上循环方法仅适用于位图。如果您循环使用位图,这意味着,在应用程序完全销毁并重新打开之前,你不会再使用它。所以你所做的并不等同于从头开始跑步,你也不必太担心OOM问题,尤其是你使用的是毕加索。因为它能为你控制峰值内存,而且你不必太担心OOM问题,尤其是你在使用毕加索。因为它可以为您控制峰值内存。