2013-10-06 3 views
0

Im интересно, как долго getIntent() в Activity будет доступен (не возвращает null). Так что скажем, я запускаю Activity B из своей активности A и передаю некоторые дополнительные данные в Intent.Как долго существует намерение

В действии B Я прочитаю дополнительные данные из намерения в методах onCreate(). Пока все хорошо. Но как долго getIntent()? Я имею в виду, если пользователь отображает Activity B, но переключается на другое приложение (например, с помощью кнопки многозадачности), и через несколько часов пользователь снова нажимает кнопку многозадачности (активность может быть уничтожена тем временем) и открывает Activity B снова. Таким образом, операция B onCreate() будет вызвана для восстановления активности B. Получает ли getIntent() теперь исходное намерение с дополнительным значением или мне нужно сохранить дополнительную сумму Intent в действиях onSaveInstanceState() и использовать Bundle в onCreate(Bundle state)?

ответ

1

ли getIntent() теперь еще возвращает исходный Intent с дополнительным значением

Технически, он возвращает копию Intent. Вообще говоря, он должен быть идентичен оригиналу Intent, включая все дополнительные функции.

+0

Итак, андроид каким-то образом сохранит намерение и восстановит его, если нужно, правильно? – sockeqwe

+0

@sockeqwe: Да. В принципе, если пользователь перейдет к тому, что логически является конкретным экземпляром этой активности (например, через список недавних задач), Android вернет вам копию «Intent», первоначально используемую для создания вашей оригинальной копии этого экземпляр активности. – CommonsWare

0

С Android документа, getIntent() возвращения

Return the intent that started this activity. 

Но их так много случая, когда getIntent является нулевым или дополнениями являются недействительными. Проверьте это link и this. Специально при вращении устройства или от нажатия клавиш.

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

if (getIntent() != null && getIntent().getExtras() != null){ 

} 

И ваш код деятельности должен готов обработать сценарий, в котором getIntent равна нулю.

Смежные вопросы