Я пытаюсь понять, почему мое приложение использует так много памяти. Я часто вижу, что он использует от 15 до 18 МБ, что значительно больше, чем я ожидал. Я посмотрел на размер кучи через DDMS и увидел это:
Это выглядело немного подозрительно, потому что мое приложение вообще не работает с большими изображениями. На самом деле общая сумма рисунков в моем приложении составляет около 250 КБ. Поэтому я создал дамп кучи и использовал MAT, чтобы определить, куда уходит вся эта память. массивы byte[] были самым большим потребителем, поэтому я углубился и заметил следующее:
Я совершенно не понимаю, почему sPreloadedDrawables отвечает за такой большой размер сохраненной кучи. Я также понятия не имею, как определить основную причину или как ее «исправить».
Куда мне идти отсюда? Мое приложение работает в основном в фоновом режиме через службы, которые вообще не имеют дело с данными изображения. У меня есть действия, которые пользователь может использовать, но опять же, они используют небольшие чертежи, которые не объясняют такой большой размер кучи. Я также проверил наличие каких-либо неприятных случаев утечки активности и т. д., но ничего не обнаружил.
РЕДАКТИРОВАТЬ: я заметил, что размер кучи значительно меньше при запуске в эмуляторе. Это довольно запутанно. :/