Итак, после нескольких часов исследований и помощи Хави, вот результаты:
Q. Зачем Android распаковывать несколько раз один и тот же фон, один раз за действие? Кажется неэффективным.
A. Даже при том, что было бы логично иметь какой-то способ попросить совместное использование растрового изображения между действиями, поскольку мы работаем на мобильных устройствах с небольшим объемом памяти, в Android этого, похоже, не существует. Каждый раз, когда растровое изображение используется в различных действиях, оно распаковывается в собственную память.
Q. Можно ли решить эту проблему, используя темы, или я увижу ту же странность «выделить один битовый массив по активности»?
После экспериментов память, используемая с использованием тем, совершенно не отличается от объема памяти, используемого путем явной установки растрового изображения в xml макетов. Это странно для меня, так как стилизация заключается в группировании атрибутов в одном месте.
Q. Почему действия не возвращаются после закрытия?
A. Ну, я не уверен, но я обнаружил, что это дало мне ошибки OOM почти только при отладке. При запуске приложения с устройства это почти никогда не происходило. Глюк в процессе отладки? Попробуйте, прежде чем вы потратите 5 часов на тестирование zillion вещь.
Q. Почему MAT и dumpsys представляют разные цифры?
A. Ответ Хави верен, dumpsys meminfo показывает всю выделенную память (native + dalvik), а MAT показывает только Dalvik. Поскольку пиксели растровых изображений размещаются в собственной памяти, MAT не увидит этого. Это верно только до Android 3.0, где они изменили схему размещения и сделали пиксельные данные растрового изображения вписанными в Dalvik.
Q. Как я решил мою проблему
A. Во-первых, это может не быть проблемой, если не выполняется отладка. Во-вторых, чтобы быть в безопасности, я заменил градиент png формой с радиальным градиентом и использовал
getWindow().setFormat(PixelFormat.RGBA_8888);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DITHER);
в продолжение моей деятельности, чтобы попытаться избежать бандитизма. На некоторых устройствах у меня все еще будет полосатость, но я бы предпочел полосатость, чем FC