Android - где хранить сгенерированные растровые изображения? - PullRequest
0 голосов
/ 15 июня 2010

У меня есть приложение, которое динамически генерирует от 6 до 100 маленьких растровых изображений, чтобы пользователь мог передвигаться по экрану в данном сеансе. В настоящее время я генерирую их в onCreate и сохраняю их на SD-карту, чтобы после изменения ориентации я мог извлечь их из внешнего хранилища и снова отобразить их. Однако для этого требуется время (загрузка), и я хотел бы сохранить ссылки на растровые изображения между изменениями жизненного цикла для более быстрого доступа.

У меня вопрос: есть ли лучшее место для хранения моих сгенерированных растровых изображений? Я думал о создании статической библиотеки хранения в моей основной деятельности, которую нужно было бы перезагрузить только после полного удаления приложения из памяти (завершение работы, другие приложения нуждаются в ресурсах, 30-минутный перезапуск и т. Д.).

В идеале, я бы хотел, чтобы пользователь мог вернуться на титульный экран, нажать кнопку «Возобновить», и в onCreate у меня просто есть доступ к этим резидентным растровым ссылкам вместо того, чтобы загружать их из хранение снова. По этой причине я не думаю, что Activity.onRetainNonConfigurationInstance - это то, что мне нужно.

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

1 Ответ

5 голосов
/ 15 июня 2010

Обязательно ознакомьтесь с постом в блоге Ромена Гая о сохранении сгенерированных растровых изображений при изменении ориентации.Это звучит как почти идентичный случай.Суть в том, что вы можете использовать onRetainNonConfigurationInstance / getLastNonConfigurationInstance для прохождения / получения произвольного объекта через разрушение связанной с ориентацией деятельности.Тем не менее, это не поможет вам вернуться назад и начать с Activity.

Вы также можете втиснуть растровые изображения в статический объект, похожий на кеш (возможно, SoftReference HashMap в Application класс), но будьте осторожны, чтобы не хранить Drawables или Views, которые могут вызвать утечек памяти из-за их ссылки на содержащую их активность.Это будет сохраняться в течение всего срока службы приложения, но я бы избегал этого, если это вообще возможно, поскольку любое глобальное состояние может вызвать ужасные проблемы и трудно обнаружить утечки памяти, когда вещи ссылаются на экземпляры Activity.

...