Недавно я прочитал эту статью в "Управление памятью вашего приложения" , я настоятельно рекомендую прочитать ее, если вы AndroidDev и никогда не делали.
Есть много хороших практик, и одна вещь, о которой я никогда не узнал, - это метод onTrimMemory (int level), вызываемый системой on каждый Activity/Fragment для уведомления о событиях, на которых память должна быть или может быть выпущена.
Вот цитата из этой статьи:
Обратите внимание, что ваше приложение получает обратный вызов onTrimMemory() с помощью TRIM_MEMORY_UI_HIDDEN только тогда, когда все компоненты пользовательского интерфейса вашего приложения процесс скрывается от пользователя. Это отличается от onStop(), который вызывается, когда экземпляр Activity становится скрытый, что происходит даже тогда, когда пользователь переходит к другому действию в ваше приложение. Поэтому, хотя вы должны реализовать onStop() для выпуска ресурсы активности, такие как сетевое подключение или отмена регистрации широковещательные приемники, , вы обычно не должны выпускать ресурсы своего пользовательского интерфейса пока вы не получите onTrimMemory (TRIM_MEMORY_UI_HIDDEN). Это обеспечивает что если пользователь перейдет к другому действию в вашем приложении, ресурсы вашего UI по-прежнему доступны для быстрого возобновления работы.
Мне действительно интересно реализовать хорошее управление памятью в моем приложении, поэтому я с нетерпением жду возможности реализовать onTrimMemory() в правильном направлении.
У меня есть только несколько вопросов:
-
onTrimMemory (TRIM_MEMORY_UI_HIDDEN), который называется прямо после onStop()?
-
что означает "освободить ресурсы пользовательского интерфейса" в этом контексте? например, очистить кеш Bitmap или фактически удалить и уничтожить каждый вид в дереве просмотра? Я обычно уничтожаю Views в методах onDestroy() или onDestroyView(), теперь мне интересно, правильно ли я делаю это.
-
существует ли обратный вызов Twin/reply для onTrimMemory (TRIM_MEMORY_UI_HIDDEN)? как onCreate-onDestroy, onStart-onStop, onCreateView-onDestroyView. Я прошу понять, где и как я должен восстановить состояние пользовательского интерфейса после Activity/Fragment, который был перенесен на передний план после onTrimMemory (TRIM_MEMORY_UI_HIDDEN) был вызван.