Попробуйте добавить это до вызова методов recycle()
, чтобы убедиться, что растровое изображение еще не переработано:
if (mBitmap != null && !mBitmap.isRecycled()) {
mBitmap.recycle();
mBitmap = null;
}
В моем случае ошибка была вызвана тем, что я изменил видимость от ушедшего к видимому (или наоборот) элемента макета. И как следствие, пространство для изображения и растрового изображения было изменено, поэтому утилизация заставила приложение сбой. Избегайте этого, и ваша проблема будет исправлена.
bitmap.recycle()
, как пользователь1111144 сказал?
– Shylendra Madda
24 January 2016 в 16:26
Для тех, кто пока не нашел решения. У меня такая же проблема. Я попытался переработать растровое изображение в onPause следующим образом:
final Drawable drawable = mImageView.getDrawable();
if (drawable instanceof BitmapDrawable) {
BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;
Bitmap bitmap = bitmapDrawable.getBitmap();
bitmap.recycle();
}
if (preView != null && !preView.isRecycled()) {
preView.recycle();
preView = null;
}
После возвращения я получил исключение: «Canvas: пытается использовать переработанное растровое изображение»
Решение для меня: Мне пришлось добавить следующие
mImageView.setImageBitmap(null);
Android не позволяет повторно использовать повторно используемый Bitmap
. Просто комментируйте bitmap.recycle()
, чтобы устранить эту ошибку. Подробнее нажмите здесь
В моем случае у меня есть раздутие макета, содержащего изображение с изображением src, где я столкнулся с такой же ошибкой. В этом случае проблема может быть решена путем добавления исходного изображения программно, например:
((ImageView)view.findViewById(R.id.imageview)).setImageBitmap(BitmapFactory.decodeResource(getContext().getResources(),
R.drawable.testimage));