Можно ли перерабатывать все данные в OnStop() И использовать фрагмент фиксатора?

1) Считается хорошей тактикой перерабатывать все растровые изображения и данные в методе OnStop.

2) Также считается хорошей тактикой использовать фрагмент фиксатора, чтобы избежать воссоздания данных при каждом изменении конфигурации. Но я не понимаю, как эти два могут быть объединены?

Допустим, я использую фрагмент для загрузки набора растровых изображений... В OnCreate я проверяю, является ли этот фрагмент нулевым или нет, чтобы получить его данные или создать новый для их создания. Если я перезапущу все свои растровые изображения в OnStop(), то при изменении конфигурации ничего не останется, потому что все данные будут переработаны.

Так что... я не вижу способа объединить эти две тактики. Я ошибся? А если нет, какой из двух лучше использовать?

Мой случай касается загрузки изображений из папки SD-карты. может быть только одна картинка, может быть 500... и показывать картинки - это не все, что делает мое приложение, поэтому после этой операции может потребоваться память для какой-либо другой операции.

1 ответ

Из управления растровой памятью:

На Android 2.3.3 (уровень API 10) и ниже рекомендуется использовать recycle(). Если в вашем приложении отображаются большие объемы растровых данных, вы, скорее всего, столкнетесь с ошибками OutOfMemoryError. Метод recycle() позволяет приложению вернуть память как можно скорее.

В соответствии с этим вам даже не нужно вызывать функцию recycle на устройствах с API 11 или более поздней версии, так что это может на самом деле не быть проблемой для вас.

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

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

Еще одна вещь, на которую стоит обратить внимание, это стратегия, которую вы пробуете: вы не будете чистить ресурсы в onStop() Activity, а будете использовать сохраненный фрагмент onDestroy(). OnDestroy() для сохраненного фрагмента не будет вызываться при изменении конфигурации, поскольку фрагмент никогда не уничтожается. Таким образом, ваши ресурсы могут оставаться в памяти после жизненного цикла вашей Деятельности и будут уничтожены в конце жизненного цикла вашего Приложения.

Другие вопросы по тегам