我使用下面的代码片段来解决与内存相关的问题,我们可以通过isRecycled()
方法来解决这个问题。用你的添加这个代码,这finalImage
是我的BitmapDrawable
,R.id.image_viewer
是我的 imageview,你可以改变它
@Override
protected void onDestroy() {
finalImage.setCallback(null);
if (!((BitmapDrawable) finalImage).getBitmap().isRecycled()) {
((BitmapDrawable) finalImage).getBitmap().recycle();
}
finalImage = null;
unbindDrawables(findViewById(R.id.image_viewer));
Runtime.getRuntime().gc();
// scaledBitmap.recycle();
System.gc();
super.onDestroy();
}
private void unbindDrawables(View view) {
if (view.getBackground() != null) {
view.getBackground().setCallback(null);
}
if (view instanceof ViewGroup) {
for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
unbindDrawables(((ViewGroup) view).getChildAt(i));
}
((ViewGroup) view).removeAllViews();
}
}