В проекте, над которым я работаю, используется несколько "высоких разрешений" (обратите внимание на кавычки). Чтобы попасть в ситуацию, один из них представляет собой PNG файл размером 640x935 1.19M. Насколько я знаю, даже если Android распакует изображения в память в качестве исходных данных, это должно быть:
640 x 935 x 4bytes = 2.39M
У меня возникают проблемы с памятью в моем проекте, которые я не могу понять, и надеюсь, что кто-то может пролить свет на этот вопрос. Я назову два устройства, которые я разрабатываю, и некоторые результаты.
Чтобы убедиться, что это не была вторичная проблема, я сделал операцию, не загружая фон при первом создании, а затем, когда пользователь нажимает кнопку, все, что она делает, это:
findViewById(R.id.completed_block_background).setBackgroundResource(R.drawable.blockbackgroundbottom1);
Затем, используя DDMS с "Update Heap" в процессе (и сначала заставляя GC удостовериться, что это не будет проблемой), я получаю следующие результаты памяти:
Nexus S: переход от 18M к 26M (разность 8M)
Galaxy Nexus: переход от 28M к 39M (разница 11M)
Итак, как вы можете видеть, теоретически размещение несжатого изображения 2.39M в фоновом режиме фактически увеличивает использование памяти 8M и 11M. Может кто-нибудь объяснить, почему это так и если есть какое-то решение?
Единственным решением, которое я смог найти, является использование растровых изображений для уменьшения разрешения или уменьшения формата канала (до сих пор это то, что я сделал, переключил их на 565 RGB, но это создает некоторые проблемы с диапазоном, которые я не могу принять).
Я бы тоже согласился, если ничего не может быть сделано, объяснение того, почему это происходит. Спасибо заранее.