Я смущен тем, насколько важна память AdMob SDK, и где эта память находится на самом деле. Позвольте мне объяснить.
У меня есть два варианта моего приложения: Free and Paid. В бесплатной версии есть объявления AdMob, в противном случае код почти одинаковый (используется обычная версия Android).
Я запускаю приложения на своем Nexus 4 (Android 4.2.1) и сравниваю использование памяти. Я смотрю на системную память, используемую приложением в настройках устройствa > apps > running. Я также смотрю на память кучи Dalvik, как сообщается сообщениями GC logcat, и используя файлы HPROF.
Когда я запускаю Платную версию, я вижу:
- Системная память: около 16 МБ
- Размер кучи Dalvik: около 10 МБ
Когда я запускаю бесплатную версию, я вижу:
- Системная память: около 29 МБ
- Размер кучи Dalvik: около 11 МБ
Другими словами, размер кучи dalvik аналогичен для обеих версий. Но фактическая системная память - 10 МБ + выше!
Проведя время, изучая профилирование памяти (http://www.youtube.com/watch?feature=player_embedded&v=_CruQY55HOk) и часы, смотрящие на файлы HPROF, чтобы удалить любую возможную утечку, я могу видеть только один вывод:
Дополнительная системная память на 10 Мбайт, используемая AdMob, на самом деле является собственной памятью, выделенной с помощью malloc, за пределами dalvik heap!
Теперь мне интересно о двух вещах:
- Я считаю, что, поскольку свободная версия системная память на 10 Мбайт больше чем платная версия, гораздо более склонна быть убитой ОС в случае давления памяти. Или же ОС Android учитывает только куча Dalvik для решения, какое приложение убить?
- Есть ли способ настроить SDK AdMob, чтобы выбрать, сколько памяти оно разрешено выделять?
Большое спасибо