в Android, если ОС убивает мое приложение, getIntent () вернет Intent с такими же дополнениями? - PullRequest
15 голосов
/ 19 ноября 2010

Конечно, после того, как мое приложение было восстановлено.

или я должен хранить все в onSaveInstanceState ()?

Ответы [ 3 ]

9 голосов
/ 23 мая 2011

Этот разговор, кажется, отвечает на это: http://groups.google.com/group/android-developers/browse_thread/thread/f47af26b696af2e2. Ищите сообщение, начинающееся с "Да и нет", и несколько перед ним.

Ответ положительный: дапосле перезапуска Операции, закрытой ОС, getIntent () вернет Intent с теми же дополнительными функциями, что и оригинал .

Тем не менее, если какой-нибудь эксперт Android сможет подтвердить, я был бы радслышать что.:)

0 голосов
/ 18 марта 2015

Ну, вы всегда можете провести простой эксперимент самостоятельно, установив в опциях разработчика флаг "не держать действия" на .

Если этот флаг включен, то при каждом выходе из приложения (скажем, при нажатии кнопки «Домой») ОС завершает действие, а когда вы возвращаетесь в свое приложение, предыдущее действие воссоздается.

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

0 голосов
/ 26 ноября 2010

Собир,

Ответ на этот вопрос "нет, это не так".Есть несколько разных причин для этого.Во-первых, давайте перефразируем, как работает Activity (я знаю, что вы это знаете, но я иллюстрирую точку).

  1. Чтобы запустить Activity, создается Intent.Это намерение может происходить из значка приложения на главном экране, из компонента вашего приложения, которое в данный момент работает, или даже из другого компонента другого приложения, если у них есть разрешение на его запуск.

  2. Намерение отправляется на Android, и Android пытается разрешить его, отправив его в приложение или запросив пользователя, если он не может разрешить сам.

  3. Когда приложение запускаетсяон сохраняет намерение, которое запустило его, чтобы обеспечить проверки безопасности, отслеживание и т. д. Он позволяет разработчику и пользователю убедиться, что это именно то, что они действительно хотят сделать ... Это намерение остается на протяжении всего жизненного цикла действияи что-либо еще, что Деятельность передает ему.

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

  5. Недостаточно памяти и Android убивает активность.Действие теряет намерение (если оно не было каким-либо образом сохранено).

  6. Пользователь видит, что действие умерло, и решает перезапустить.Android создает новое намерение для запуска действия -> вернуться к шагу 1.

Поскольку для перезапуска приложения требовалось новое намерение, старое намерение больше не привязано к действию,Что касается того, собирается ли он в мусор или нет, я не уверен, когда это произойдет, но он недоступен.Если хранение ваших дополнений является вашей заботой, есть только один способ сделать это (конечно, несколько возможных реализаций).Намерение и Дополнения должны быть сохранены каким-либо образом.Это не повлияет на функцию getIntent (), но вы МОЖЕТЕ создать личную функцию getOriginalIntent (), на которой она будет основана.Оттуда есть несколько опций ... Например, вы можете перезапустить Activity с помощью Original Intent, и THEN getIntent () сработает ...

FuzzicalLogic

...