Android App - Можем ли мы повторно использовать изображения во время выполнения? - PullRequest
3 голосов
/ 18 ноября 2010

У нас есть Android-приложение, которое выдает ошибку памяти на Android 1.6. Он работает нормально на 2.0 года. На этом этапе мы пытаемся сократить использование памяти во время выполнения.

Мы думали о повторном использовании изображений, таких как фоновое изображение каждого экрана. Можно ли загрузить фоновое изображение один раз в память во время запуска приложения и повторно использовать эту кэшированную копию на каждом экране, а не на каждом экране, загружая одно и то же фоновое изображение, увеличивая общую площадь в ОЗУ?

Мы понимаем, что существует много других способов и рекомендаций по использованию памяти во время выполнения. Но на данный момент мы просто хотели узнать, действительно ли этот подход «повторного использования изображения» осуществим?

Если да, как мы можем это сделать? Сохранит ли он вообще какую-либо память, или ОС Android все равно создаст несколько копий одного и того же ресурса для каждого экрана, не принося никакой пользы с точки зрения памяти?

Большое спасибо за то, что уделили время чтению моего поста.

Ответы [ 2 ]

2 голосов
/ 18 ноября 2010

Если это фоновое изображение загружается как Drawable из ресурса, его растровые данные уже распределяются между всеми Drawables, созданными таким образом. Так что нет, это, вероятно, не принесет вам пользы в вашем конкретном случае.

0 голосов
/ 18 ноября 2010

Да, вы можете повторно использовать изображения.

Обычно это делается для ListViews, где каждая строка содержит одно и то же изображение.

В этом случае вы можете получить растровое изображение один раз в конструкторе вашегоадаптера и повторно используйте его в методе getView (), чтобы вам не приходилось загружать его для каждой строки.Этот трюк представлен здесь

В вашем случае вы можете загрузить фоновое растровое изображение в методе onCreate () вашего основного действия, сохранить его в качестве публичного статического атрибута и затем повторно использоватьэто во всех ваших действиях.

Но я думаю, что это не будет иметь большого значения и не потребует дополнительной платы за код.

Поскольку вы работаете над настройкой своего пользовательского интерфейса, я предлагаю вампосмотрите презентацию Google I / O 2009 от Romain Guy , если вы ее еще не видели.Он показывает множество полезных трюков для повышения производительности пользовательского интерфейса, особенно когда дело доходит до манипулирования растровыми изображениями.

...