Android-приложение занимает много памяти

Работая над своим приложением для Android, я недавно проверил диспетчер задач, чтобы увидеть, сколько памяти занимает мое приложение.

Прямо сейчас в моем приложении есть два рекламных баннера, которые выполняются сервисами AdMob, а затем фрагмент интерфейса для карты Google. Помимо всего этого, у меня есть меню, в котором я использую контейнер, к которому я добавляю представления в коде Java. Я предпочитаю это представлению в виде списка, так как оно более легкое и мне проще структурировать то, что я хочу делать с представлениями (и я могу использовать собственную систему анимации Android при добавлении/удалении представлений).

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

Все это каким-то образом добавляет моему приложению 44,8 МБ памяти, что кажется ненормально большим по сравнению с предыдущими цифрами разработки. Это также первый раз, когда я решил использовать контейнер для добавления представлений через цикл, а не адаптер с методом списка-представления.

Может ли кто-нибудь сразу сказать, почему мое приложение сразу занимает так много памяти? Я впервые использую все эти компоненты: баннеры AdMob, карты Google и контейнеры с добавленными представлениями.

Мой LogCat не показывает предупреждений о неэффективных действиях. Просто интересно посмотреть, не делаю ли я что-то не так. Если у кого-то есть идеи, я готов предоставить любой исходный код.


person Vesica Piscis    schedule 04.06.2014    source источник


Ответы (2)


Я думаю, что 44,8 МБ вполне нормально для современного Android-приложения. Я делаю ставку на Google Maps, так как это очень ресурсоемкая библиотека (как с точки зрения процессора, так и с точки зрения памяти). В любом случае, вы можете попробовать последовательно удалить каждый компонент из приложения и посмотреть, как это повлияет на объем памяти.

person Andrey Chernih    schedule 04.06.2014
comment
Спасибо Андрей! Я думаю, что я просто на пределе, так как мне все еще нужно реализовать сервис, который будет собирать около 13 маленьких значков для реализации в приложении. По какой-то причине я помню, что читал, что приложения не могут превышать 64 МБ, но я могу ошибаться. Просто хотел убедиться, что я не нарушаю эту границу. Я попытаюсь удалить каждый компонент, чтобы посмотреть, разрешится ли что-нибудь. Спасибо еще раз. - person Vesica Piscis; 04.06.2014
comment
64 МБ по-прежнему является нормальным использованием памяти для приложения. Вы можете использовать метод getMemoryClass, чтобы понять, что ограничение на конкретном устройстве. Не обращайте внимания на документацию, в которой упоминается 16 МБ, мое приложение показывает, что 96 МБ является самым популярным классом памяти на разных устройствах (~ 30 000 устройств под управлением Android 3.0+). - person Andrey Chernih; 04.06.2014

Как уже сказал Андрей, 44,8 Мб для Android-приложения не так уж и много. Но вы можете использовать DDMS для отслеживания выделений и обновлений кучи, чтобы точно знать, занимает ли эта память. См. это: https://developer.android.com/tools/debugging/debugging-memory.html

Кроме того, я бы рекомендовал использовать ListView с адаптером, поскольку элементы ListView могут быть переработаны, что может значительно повысить производительность (см. этот учебник).

person Rafi Kamal    schedule 04.06.2014
comment
Я не знала об этом средстве! Я должен буду использовать это. Я своего рода реверс-инженер, поэтому всегда полезно изучать эти новые инструменты! Спасибо Рафи! - person Vesica Piscis; 04.06.2014