Ресурсы Android Класс Использование памяти - PullRequest
2 голосов
/ 22 декабря 2011

Я делаю модификации для запуска Android 4.0, и у меня было много ошибок OutOfMemory. После обновления 4.0.3 оно стало намного хуже (или началось, кажется, все было хорошо, но я так и не смог протестировать должным образом), и я много чего пытался исправить. Ошибка также в стоковом лаунчере без моих модификаций.

Я посмотрел на кучу hprof в Eclipse Memory Analyzer и заметил, что класс системных ресурсов занимает 50% памяти. Почти все это были растровые изображения, включая некоторые растровые изображения размером 1 МБ 512x512 пикселей. Так как мой телефон 400x800, я не понимаю, почему у него будет ресурс с таким разрешением. Тогда было более 800 других растровых изображений, но это были более разумные размеры.

Приложение не содержит 800 ресурсов, так возможно ли, что они из других пакетов? Я знаю, что приложение загружает значки и предварительные просмотры виджетов из других приложений, но это все еще не до 800, и даже если оно является их частью, почему оно все еще хранится в памяти?

Я загрузил файл hprof в http://176.31.247.124/nebkat/heap.hprof, если это необходимо.

Ответы [ 2 ]

0 голосов
/ 25 декабря 2011

Оказывается, это была проблема в CyanogenMod. Это было исправлено.

0 голосов
/ 22 декабря 2011

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

Единственный способ устранения исключений OutOfMemory, связанных с растровыми изображениями, - вам придется освобождать ресурсы с помощью Bitmap.Recycle(); после того, как вы закончили использовать это растровое изображение. И используйте Runtime.gc(), чтобы очистить сборщик мусора.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...