Может ли средство отслеживания распределения или анализатор кучи помочь в отслеживании ошибки «размер растрового изображения превышает бюджет виртуальной машины»? - PullRequest
1 голос
/ 27 марта 2012

У меня большие проблемы с отслеживанием ошибки «размер растрового изображения превышает бюджет виртуальной машины». Я посмотрел на другие вопросы и попробовал все sugesstions (освобождение ресурсов, использование bitmap.recycle () и установка переменных, растровых изображений, холстов равными нулю, когда активность разрушена или виды отключены от окна https://stackoverflow.com/a/6779448/571143,, также пытался избавиться контекста this и использовал this.getAplicationContext ()).

Проблема, с которой я сталкиваюсь, заключается не в том, что растровое изображение слишком велико для загрузки. Сначала все загружается нормально, но после многих повторных изменений текущей активности я получаю эту ошибку (на устройстве это происходит после гораздо большего количества изменений активности, чем на эмуляторе).

Итак, возвращаясь к моему вопросу, есть ли способ использовать трекер выделения или анализатор кучи, чтобы направить меня в правильном направлении? В этих инструментах нет никаких следов «выделения растровых изображений», только небольшие (в основном менее 1 КБ) выделения. Я уже читал это: http://android -developers.blogspot.com / 2009/02 / track-memory-allocations.html

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

Буду признателен за любые подсказки относительно этих инструментов в таком сценарии.

ура, kajman

1 Ответ

1 голос
/ 27 марта 2012

Как вы уже поняли, это какая-то утечка памяти. Если вы этого еще не сделали, убедитесь, что вы не просто накапливаете растровые изображения в кэше, даже не очищая его. Другие вероятные (и более тонкие) проблемы включают наличие долго выполняющихся задач, которые имеют ссылки на действия или контексты, или действия, регистрирующие слушателей с долго выполняющимися задачами или одиночками.

Вы можете использовать инструмент Eclipse Memory Analyzer http://www.eclipse.org/mat/, чтобы отследить, какие типы ссылок хранятся. Это немного сложно на телефонах 2.x, потому что растровые изображения размещаются в собственной памяти и не будут отображаться в дампе кучи виртуальной машины. Вы по-прежнему будете видеть растровые изображения, но они не будут перечислены в том размере, который они на самом деле занимают. Вы можете обойти это, пытаясь сравнить количество растровых объектов при первом открытии приложения и после запуска множества новых действий.

Для отличной беседы об устранении этих проблем и использовании соответствующих инструментов см. Google IO talk: http://www.youtube.com/watch?feature=player_embedded&v=_CruQY55HOk

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