Управление памятью Android вне кучи - PullRequest
4 голосов
/ 15 января 2010

Я работаю над приложением для Android, и у нас, поскольку у нас много графики, мы используем много памяти.

Я наблюдаю за размером кучи памяти и его размером около 3-4 Мб, и выгляжу как 5 Мб, когда я делаю что-то, что требует больше памяти (а затем возвращается к 3). Это не имеет большого значения, но некоторые другие вещи обрабатываются вне кучи, например, загрузка загружаемых объектов.

Например, если я запускаю инструмент ddms вне затмения и захожу в sysinfo, я вижу, что мое приложение берет 20 Мб на Droid и 12 на G1, но размер кучи одинаков в обоих, потому что данные одинаковы но изображения разные.

Итак, вопросы: Как я узнаю, что забирает память из кучи? Что еще занимает память вне кучи? Сложные макеты (большое дерево)? Анимации

Спасибо

Daniel

Ответы [ 2 ]

4 голосов
/ 08 марта 2010

Растровые объекты занимают довольно много памяти .

Ex. если ваше приложение загружает 10 КБ jpg из сети и использует BitmapFactory для декодирования его в растровое изображение, то для растровых объектов требуется около 30-100 КБ памяти в зависимости от разрешения вашего изображения. 3 байта для каждого пикселя (1 байт для каждого цвета)

И да, все виды объектов используют память, например, LinearLayouts, ImageViews и т. Д. Если вы создаете и уничтожаете многие из этих объектов, напр. при прокрутке / просмотре изображений происходит утечка памяти. Gc () не обрабатывает так называемые недолговечные объекты так быстро, как хотелось бы.

* Сохраняйте количество объектов просмотра на стабильном уровне ** и перерабатывайте их, вместо того чтобы разрушать и создавать новые.

REf: http://developer.android.com/resources/articles/track-mem.html

Если ваше приложение достигает 20 МБ в памяти, оно может FC, поскольку BitmapFactory пытается декодировать следующее изображение.

2 голосов
/ 04 февраля 2010

Один очевидный кандидат - это вне курса растровые изображения (двойная буферизация на Android?), Так как размер экрана имеет в ~ 4 раза больше пикселей на дроиде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...