Ответ 1
Вместо этого вы можете использовать picasso() для управления изображениями.... по крайней мере, как быстрый эксперимент, чтобы увидеть, ведет ли он себя по-другому.
Мой проект работал, пока я не обновил свой S6 Edge до Android 6.0.1.
Приложение вылетает с ошибкой OutOfMemory после второго запуска.
Приложение содержит 2000+ изображения в каталоге, и я использую таймер для увеличения счетчика и отображения их в imageView. Когда вызывается onFinish()/onPause()/onDestroy(), я уничтожаю/отменяю все объекты, такие как таймеры, счетчик и imageView, устанавливая их в null.
Вот как я выбираю/распечатываю изображение в imageView
int resID = getResources().getIdentifier("animation"+i , "drawable", getPackageName());
Drawable animationFrame = ContextCompat.getDrawable(this, resID);
animationView.setImageDrawable(animationFrame);
i++;
Он запускается при первом запуске (даже если я устанавливаю приложение с помощью сгенерированного APK). Когда я удаляю приложение из свернутых приложений, оно вылетает через 2-3 секунды. Я проверил выделенную память, и это нормально (до 12 МБ) при первом запуске, тогда как на втором выделенная память составляет 255 МБ.
Метод onDestroy() Это включает ВСЕ инициализированные мои переменные. Мои переменные инициализируются как частные или без переменной доступа.
@Override
protected void onDestroy() {
super.onDestroy();
pauseAnimation();
animationView.setImageDrawable(null);
animationView = null;
justAnimation = null;
buttonSign = null;
i = 0;
media.stop();
media = null;
deathRateEU = 0;
deathRateUK = 0;
labelNumber = null;
labelNumberUK = null;
buttonSign = null;
loadingEU = null;
loadingUK = null;
}
Media - это MediaPlayer, инициализированный как открытый, и он воспроизводит звук, когда counter (i) достигает точки
Я установил это на другом устройстве, которое работает под управлением Android 5.1.3 (не уверен, но это что-то 5.1).
Существует ли известная ошибка для проблем OutOfMemory, когда приложение свернуто на Android 6.0.1?
Я на 100% уверен, что я не внес никаких изменений до/после того, как мой телефон обновился до версии 6.0.1
Монитор памяти при первом запуске
Заметки:
Вместо этого вы можете использовать picasso() для управления изображениями.... по крайней мере, как быстрый эксперимент, чтобы увидеть, ведет ли он себя по-другому.
Возможно, эта статья поможет вам https://android.jlelse.eu/loading-large-bitmaps-efficiently-in-android-66826cd4ad53
Я бы порекомендовал вам использовать библиотеку Glide для эффективной загрузки больших изображений.
Вы также можете проверить эту статью о том, как эффективно загружать растровые изображения.