& ldquo; Приложение остановлено & rdquo; & ldquo; Закрыть приложение & rdquo; андроид студия

Exception - проверенный класс исключений. Поэтому любой код, вызывающий метод, объявляющий, что он throws Exception должен обрабатывать или объявлять его.

-2
задан Markus Kauppinen 16 January 2019 в 15:12
поделиться

3 ответа

Ваш «логотип1» слишком велик для определенных устройств, и он будет зависать. Переместите его в папку drawable-xxhdpi.

0
ответ дан Vygintas B 16 January 2019 в 15:12
поделиться

Братан, в SCREENONE.JAVA у вас есть, переопределите один и тот же метод дважды. Пожалуйста, исправьте это, и ваше приложение будет отлично работать

0
ответ дан Tanny 16 January 2019 в 15:12
поделиться

Это явно проблема с памятью, вызванная загрузкой в ​​память тяжелого растрового изображения.

Теперь вот советы, которым вы можете следовать и которых можно избежать из-за нехватки памяти в приложении Android.

  1. Всегда используйте Контекст действия вместо Приложения Контекст. потому что контекст приложения не может быть сборщиком мусора. И освободите ресурсы, когда ваша деятельность закончится. (жизненный цикл объекта должен совпадать с жизненным циклом).
  2. Когда активность заканчивается. Проверьте HEAP DUMP (инструмент анализа памяти в Android Studio). Если в HEAP DUMP есть объекты из завершенного действия, происходит утечка памяти. проверьте ваш код и выясните, что вызывает утечку памяти.
  3. Всегда используйте inSampleSize. Теперь, что такое inSampleSize ? с помощью inSampleSize вы фактически говорите декодеру не захватывать каждый пиксель в памяти, а не подобразец изображения. Это приведет к тому, что в память будет загружено меньшее количество пикселей, чем исходное изображение. Вы можете указать декодеру захватывать каждый 4-й пиксель или каждый второй пиксель исходного изображения. если inSampleSize равно 4. декодер вернет изображение, которое составляет 1/16 числа пикселей в исходном изображении.
  4. Считать растровые размеры перед загрузкой в ​​память.

    Как чтение размеров растрового изображения перед загрузкой изображения в память может помочь вам избежать ошибки нехватки памяти? Давайте учиться

    использовать inJustBounds = true

вот методика, с помощью которой вы можете получить размер изображения перед загрузкой его в память

BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.id.myimage, options);
int imageHeight = options.outHeight;
int imageWidth = options.outWidth;
String imageType = options.outMimeType;
[ 1128] Приведенный выше фрагмент кода не будет не давать изображение / растровое изображение, он будет возвращать нуль для растрового объекта. но он определенно вернет ширину и высоту этого изображения. R.id.myimage.

Теперь у вас есть ширина и высота изображения, вы можете увеличивать или уменьшать изображение на основе следующих факторов:

  • ImageView размер, который будет используется для отображения изображения. Доступный объем памяти. Вы можете проверить доступный объем памяти, используя ActivityManager и getMemoryClass.
  • Размер экрана и плотность устройства.

Теперь,

  1. Используйте соответствующую Конфигурацию битовой карты .

Конфигурации растрового изображения - это цветовое пространство / глубина цвета изображения. Конфигурация растрового изображения по умолчанию в Android - RGB_8888, что составляет 4 байта на пиксель.

Если вы используете цветной канал RGB_565, который использует 2 байта на пиксель. половина выделения памяти для того же разрешения:)

  1. Использовать свойство inBitmap для целей переработки

  2. Не создавать статический объект Drawable, поскольку он не может быть сборщиком мусора

  3. Запросить большую кучу в файле манифеста

  4. Использовать несколько процессов, если вы выполняете много обработки изображений (задача, требующая большого объема памяти) ) или используйте NDK (Native Development используя c, c ++)

Источник

0
ответ дан Dennis 16 January 2019 в 15:12
поделиться
Другие вопросы по тегам:

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