Холст: пытается использовать переработанное растровое изображение [дубликат]

Тип py -v вместо python -v в командной строке

40
задан Micer 2 March 2014 в 17:27
поделиться

5 ответов

Попробуйте добавить это до вызова методов recycle(), чтобы убедиться, что растровое изображение еще не переработано:

if (mBitmap != null && !mBitmap.isRecycled()) {
    mBitmap.recycle();
    mBitmap = null; 
}
53
ответ дан Micer 22 August 2018 в 14:19
поделиться
  • 1
    Я продолжаю получать ту же ошибку с этими точными строками (Android 4.4.4). – Luis A. Florit 19 April 2015 в 18:47
  • 2
    Напишите приведенный выше код в функции onDestroy. – Sagar Devanga 12 September 2015 в 09:34
  • 3
    такая же ошибка после добавления условия! – Mayur R. Amipara 28 September 2015 в 09:27
  • 4
    Хорошая попытка, но не исправила мою ошибку. Мне пришлось добавить этот код в onDestroy, чтобы выпустить все растровые изображения в конце действия. +1 в любом случае для правильного подхода – voghDev 15 February 2016 в 20:40
  • 5
    Проблема с этим заключается в том, что на самом деле это не устраняет проблему, потому что, как только эта растровая модель пытается снова использовать себя при загрузке страницы, она перерабатывается, это решение устраняет проблему, связанную с переработкой повторно используемого изображения, а не с использованием переработанного образ. – Trevor Hart 3 March 2017 в 21:41
  • 6

В моем случае ошибка была вызвана тем, что я изменил видимость от ушедшего к видимому (или наоборот) элемента макета. И как следствие, пространство для изображения и растрового изображения было изменено, поэтому утилизация заставила приложение сбой. Избегайте этого, и ваша проблема будет исправлена.

6
ответ дан Alvar Blanco 22 August 2018 в 14:19
поделиться
  • 1
    поэтому вы говорите, что удалите 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);
17
ответ дан Jared Burrows 22 August 2018 в 14:19
поделиться
  • 1
    SetImageBitmap (null) был тем, что мне нужно. У меня был RecyclerViewHolder с ImageButton, который держал на переработанном растровом изображении и пытался получить к нему доступ позже, после того как я вызвал .recycle (), если в источнике данных моего адаптера. – Doug Voss 27 January 2017 в 01:55

Android не позволяет повторно использовать повторно используемый Bitmap. Просто комментируйте bitmap.recycle(), чтобы устранить эту ошибку. Подробнее нажмите здесь

4
ответ дан Kartheek 22 August 2018 в 14:19
поделиться
  • 1
    Затем растровое изображение висит вокруг в памяти и вызывает утечки, что почти хуже. – Trevor Hart 3 March 2017 в 21:43

В моем случае у меня есть раздутие макета, содержащего изображение с изображением src, где я столкнулся с такой же ошибкой. В этом случае проблема может быть решена путем добавления исходного изображения программно, например:

((ImageView)view.findViewById(R.id.imageview)).setImageBitmap(BitmapFactory.decodeResource(getContext().getResources(),
                R.drawable.testimage));
0
ответ дан Ratna Halder 22 August 2018 в 14:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: