Android - Где хранить сгенерированные растровые изображения?

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

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

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

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


person Josh    schedule 15.06.2010    source источник


Ответы (1)


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

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

person Yoni Samlan    schedule 15.06.2010
comment
У меня было ощущение, что идея с кэшем не сработает. Я бы поместил туда только растровые изображения (чтобы не было утечек контекста), но, думаю, мне просто нужно было немного подтолкнуть в правильном направлении. Похоже, что onRetain — это то, что нужно. - person Josh; 15.06.2010