Прояснение жизненного цикла приложения для Android
Может ли кто-нибудь подтвердить следующее в отношении жизненного цикла приложения Android?
1) Когда приложение находится на переднем плане, память будет содержать экземпляр объекта Application, экземпляры всех действий (не убитых) и все ссылки на объекты, на которые ссылаются один из корней (не были собраны мусор)
2) Когда приложение переходит на задний план, в какой-то момент Android Framework может:
a) Убейте весь процесс, указанный для цели приложения, которое существенно устранит все объекты из памяти
b) Убейте ТОЛЬКО (настолько важно, чтобы никакая другая ссылка на объект не была удалена) действия (путем их завершения и, в сущности, любые фрагменты), сохраняя их состояния и создавая стек операций и оставляя что-либо еще (объект приложения, любые другие статические объекты, ссылки, которые доступны из любого из корней).
Меня больше всего интересует 2b, но я бы подтвердил все эти моменты, поскольку я пытаюсь понять ментальную концепцию от начала до конца.
Ответы
Ответ 1
Хорошо, во время моего поискового поиска в последние недели мне удалось получить дополнительную информацию, и теперь я могу ответить на свои (и, надеюсь, на другие вопросы):
1) Исправить
2a) Правильно
2b) Неверно. Рамка android, если она нуждается в памяти или по какой-то другой причине должна "убить/уменьшить" приложение, она может сделать это, только убив весь процесс, посвященный этому приложению. Рамка андроида может скопировать убитую выбранную деятельность (-и) или убить все действия, но оставить все остальные объекты живыми (например, объект приложения, одноточие и т.д.).
Ответ 2
Если вы ищете официальное подтверждение, лучше спросите только Google:).
но я чувствую, что после прочтения этого вы лучше поймете эту концепцию.
Управление памятью Android
жизненный цикл процесса Android
Ответ на первый вопрос:
да подтвердите использование DDMS.
ответ на вопрос 2a: да ОС может убить процесс в любой момент времени, когда требуется память для другого процесса, что приведет к уничтожению всего объекта, связанного с процессом.
ответ на вопрос 2b questiong:
Из официальной документации
Жизненный цикл процесса 3. Фоновая активность (активность, которая не видна пользователю и была приостановлена) больше не критична, поэтому система может безопасно убить свой процесс для восстановления памяти для других передних или видимых процессов. Если его процесс должен быть убит, когда пользователь перейдет к действию (сделав его видимым на экране снова), его метод onCreate (Bundle) будет вызван с сохраненнымInstanceState, который он ранее поставил в onSaveInstanceState (Bundle), чтобы он может перезапустить себя в том же состоянии, в котором пользователь оставил его.
Ответ 3
Да, вы в основном правы в отношении 2b).
Если действие приостановлено или остановлено, система может отбросить активность из памяти, либо попросив ее закончить, либо просто убив ее процесс.
Однако есть случаи, когда onSaveInstantSate не вызывается:
Обратите внимание, что важно сохранить постоянные данные в onPause() вместо ofSaveInstanceState (Bundle), поскольку последний не является частью обратные вызовы жизненного цикла, поэтому не будут вызываться в каждой ситуации, поскольку описанных в его документации.
Источник документов Android
Вы можете запросить андроид, чтобы всегда уничтожать действия на фоне, включив следующую опцию разработчика. Если вы отлаживаете свое приложение, вы должны пройти через методы жизненного цикла и посмотреть, что происходит.
Настройки → Параметры разработчика → Приложения → Не выполнять действия
Ответ 4
Типичный жизненный цикл для приложения не существует. Объект приложения живет в памяти, пока он не будет убит ни самим Android, ни вручную пользователем.
В приведенных выше пунктах приведены ваши ответы:
1) Это верно.
2) а) Это также верно.
2) b) Когда приложение переходит в фоновый режим, вы можете сохранить данные текущей активности, находящейся на переднем плане. Кроме того, когда вы убиваете приложение самостоятельно (удалив его из недавнего списка), все действия в стеке приложений и их сохраненные данные (не постоянные данные) были убиты, поскольку приложение является базой для всех действий.
Ответ 5
1) Когда приложение находится на переднем плане, память будет содержать экземпляр объекта Application, экземпляры всех действий (не убитых) и все ссылки на объекты, на которые ссылается одна из root (не были собраны мусор)
> There will only ever be a few such processes in the system, and these
> will only be killed as a last resort if memory is so low that not even
> these processes can continue to run. Generally, at this point, the
> device has reached a memory paging state, so this action is required
> in order to keep the user interface responsive.
2) Когда приложение переходит на задний план, в какой-то момент Android Framework может:
.
a) Убить весь процесс, указанный для цели приложения которые существенно стирают все объекты из памяти
> These processes have no direct impact on the user experience. Provided
> they implement their Activity life-cycle correctly (see Activity for
> more details), the system can kill such processes at any time to
> reclaim memory for one of the three previous processes types. Usually
> there are many of these processes running, so they are kept in an LRU
> list to ensure the process that was most recently seen by the user is
> the last to be killed when running low on memory.
b) Убейте ТОЛЬКО (так что никакие другие ссылки на объекты не будут удалены) (заканчивая их и, в сущности, любые фрагменты как хорошо), сохраняя свои состояния и создавая стек операций и оставляя что-либо еще (объект приложения, любые другие статические объекты, ссылки, которые доступны из любого из корней).
Частично, как в пункте 2.a. Объяснение
> Usually there are many of these processes running, so they are kept in an LRU
> list to ensure the process that was most recently seen by the user is
> the last to be killed when running low on memory.
Источник - developer.android.com
Ответ 6
Ну, это зависит от того, как работает ОС Android. Устройство Android - это встроенная система, но работает практически так же, как на ПК, и когда я говорю о Android как ОС, у нее, безусловно, будут все функции ОС. То, на что вы указываете, - это функция управления памятью и планирования в ОС Android.
MMU (модуль управления памятью) логически отдает предпочтение выполняемой в настоящее время задаче i.e ur launcher или любому другому приложению, которое работает. Две вещи, на которые я хочу ответить, могут помочь вам немного больше:
- Представления (генерируются ли xml или Javacode, они динамически генерируются.).
- Android OS запускает все приложения как процесс с подпроцессами (активностями) на виртуальной машине Dalvik.
- Все ваши действия до их создания равны нулю, когда они создаются, создается их экземпляр. После их открытия их сохраненный экземпляр снова отображается (концепция шаблона проектирования Singleton).
Итак, позвольте мне сказать вам, что я не думаю, что оба варианта верны. Я верю в следующее:
1. Просмотр всегда будет генерироваться динамически.
2. Экземпляр будет сохранен в памяти.
3. В фоновом режиме приложения весь процесс с доступными экземплярами будет в памяти.