Странное изображение с использованием 1 Мб кучи

Из любопытства я недавно протестировал свое Android-приложение на предмет утечек памяти, используя Eclipse Memory Analyzer.

Я натолкнулся на странное растровое изображение размером 512 x 512 пикселей, которое заняло около 1 мегабайта памяти моего устройства.

Я проверил свою папку drawables и не смог найти растровое изображение такого размера (512 x 512).

Я начал гуглить и наткнулся на этот вопрос, где пользователь объясняет, как получить фактическое изображение за ссылкой "утечка памяти" в анализаторе памяти:

MAT (Eclipse Memory Analyzer) - как просматривать растровые изображения из дампа памяти

Я следовал за учебником и с помощью GIMP я извлек следующее изображение:

Итак, мои вопросы:

  • Что это такое?
  • Что это делает в моей куче приложений?
  • Как мне от этого избавиться?
  • Кто-нибудь еще имеет такой же растровое изображение в своей куче?

Заметки:

  • В моей папке drawables нет растрового изображения, похожего на это
  • Самое большое растровое изображение, которое использует мое приложение, - 140 x 140 пикселей.
  • У меня такое ощущение, что этот растр как-то исходит из системы
  • Растровое изображение находится в куче сразу после запуска приложения - без какого-либо взаимодействия с пользователем
  • Я отлаживаю на HTC One S, Android 4.1 Cyanogen Mod (Экран 540 x 960)
  • Я не использую внешние библиотеки

Обновление:

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

Оба приложения, которые я тестировал, также показали одно и то же растровое изображение в анализаторе памяти с точно таким же количеством потребляемых байтов:

Кроме того, мне удалось выяснить, что:

Источник растрового изображения всегда связан с активностью LAUNCHER приложения.

Так что с этим делать? Есть ли способ избавиться от этого?

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

1 ответ

Решение

Фон окна по умолчанию, используемый Android, представляет собой изображение 512x512 (сине-темный градиент, который вы видите с темной темой, или серо-белый градиент с темной темой). На способных устройствах это изображение заменено процедурным градиентом начиная с Android 4.2.

Обратите внимание, что это растровое изображение обычно загружается в Zygote и используется всеми приложениями. Он может отображаться в дампах кучи, если дамп не исключает объекты, выделенные Zygote.

Вот два фона 512x512, о которых я говорю, если вам интересно:

https://github.com/android/platform_frameworks_base/blob/jb-mr0-release/core/res/res/drawable-nodpi/background_holo_dark.png

https://github.com/android/platform_frameworks_base/blob/jb-mr0-release/core/res/res/drawable-nodpi/background_holo_light.png

Другие вопросы по тегам