использование карты в верхней части окна системы восстановления - PullRequest
0 голосов
/ 13 октября 2019

Почему при использовании больших изображений с помощью cardview происходит сбой системы Android? Я использовал изображения 1280 X 600 для просмотра карт, но при запуске приложения после сбоя установки система выдает out of memory error из logcat.

У меня было не менее 400 МБ ОЗУ при запуске приложения (при просмотре с помощью простого системного монитора), но приложение вылетало. Cardview предназначен для работы только с небольшими изображениями? Что если у нас есть для использования изображений большего размера для устройств с большим разрешением? Кардвью использовался с видом переработчика, а ОС, на которой он тестировался, была KitKat.

Ответы [ 2 ]

2 голосов
/ 13 октября 2019

У вас может быть 400 МБ ОЗУ, но вся ОЗУ не будет напрямую предоставлена ​​вашему приложению, поэтому приложение будет аварийно завершать работу ... если вы хотите использовать разные изображения с разрешением dpi для разных устройств, вы можете добавить это в drawable, drawable-mdpi, drawable-xhdpi, drawable-xxhdpi и т. д., чтобы система могла автоматически выбирать их ... если вы загружаете из URL-адреса ... тогда вы можете использовать сторонние библиотеки, такие как Picasso, Glide и т. д., для эффективной загрузки изображения

Кроме того, в своем вопросе вы говорите, что добавляете представление карточки в представлении переработчика ... это означает, что будет загружено более одного изображения 1280x600, что займет много памяти и приведет к сбою приложения.

На ваш вопрос "Кардвью предназначена для работы только с небольшими изображениями?"Нет, просмотр карты не связан с вашей нехваткой памяти ... его размер изображения и память, предоставленные для вас ... просмотр карты может работать с любым размером изображения.

Добавление Добавление android: largeHeap = "trueк вашему проявлению может помочь вам в некоторой степени

1 голос
/ 13 октября 2019

Я столкнулся с той же проблемой. Добавление android: largeHeap = "true" к тегу в AndroidManifest.xml решило проблему для меня на моем физическом Android, но я немного обеспокоен тем, что это все еще может быть проблемой для некоторых устройств с меньшим объемом памяти?!?

Вы не упоминаете, как хотите показать изображение, является ли оно фоном карты или просмотром изображения в виде карты. Если вы хотите использовать ImageView в CardView, вы можете использовать библиотеку Picasso или Glide для решения этой проблемы.

Ошибка нехватки памяти является очень распространенной ошибкой, когда вы разрабатываете приложение, которое работает с несколькими наборами изображений или большими растровыми изображениями, или с некоторыми элементами анимации. В этом случае мы должны быть очень осторожными и эффективными при обработке изображений или размещении и освобождении объектов. Ошибка OOM возникает, когда выделение пересекает предел кучи или ваш процесс требует объем памяти, пересекающий предел кучи.

...