Выявление и устранение причины большого размера кучи

Я пытаюсь понять, почему мое приложение использует так много памяти. Я часто вижу, что он использует от 15 до 18 МБ, что значительно больше, чем я ожидал. Я взглянул на размер кучи с помощью DDMS и увидел следующее:

enter image description here

Это выглядело немного подозрительно, потому что мое приложение вообще не работает с большими изображениями. На самом деле общая сумма рисунков в моем приложении составляет около 250 КБ. Поэтому я создал дамп кучи и использовал MAT, чтобы определить, куда уходит вся эта память. Массивы byte[] были самым большим потребителем, поэтому я углубился и заметил следующее:

enter image description here

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

Куда мне идти дальше? Мое приложение работает в основном в фоновом режиме через службы, которые вообще не имеют дело с данными изображения. У меня есть действия, которые пользователь может использовать, но опять же, они используют небольшие чертежи, которые не объясняют такой большой размер кучи. Я также проверил наличие каких-либо неприятных случаев утечки активности и т. д., но ничего не обнаружил.

РЕДАКТИРОВАТЬ: я заметил, что размер кучи значительно меньше при запуске в эмуляторе. Это довольно запутанно. :/

53
задан Cœur 8 August 2017 в 18:00
поделиться