onActivityResult для убитой активности
Можете ли вы помочь мне с хорошим решением для моей проблемы.
У меня есть активность 1, активность 2.
Activity1 создает пользовательский интерфейс в onCreate()
, затем в какой-то момент пользователь запускает Activity2 с startActivityForResult()
Ситуация с нехваткой памяти кажется очень необычной, но я сталкивался с ней однажды, поэтому хочу предотвратить ее в будущем. Я даже могу повторить эту ситуацию, запустив какое-то "сложное" приложение или игру. Результат - когда я возвращаюсь в свое приложение, Activity2 воссоздается. И когда я затем возвращаюсь к Activity1, нажимая кнопку "Назад", он также воссоздается. И у меня здесь логическое столкновение. Пользовательский интерфейс Activity1 создается с нуля в onCreate
и в то же время он обновляется в onActivityResult
!
Как я могу решить это? Активизировать флаг onCreate
и проверить это в onActivityResult
? Это работает для меня, но я думаю, что это не так, как должно быть.
В моем телефоне стоит стоковая ROM, Android 2.3.5
ОБНОВЛЕНИЕ: Хорошо, конкретный вопрос, у меня есть список элементов. Встроено onCreate()
, Уходя в Activity2, мне нужно запомнить идентификатор элемента, по которому щелкали, чтобы обновить его позже в onActivityResult()
, Это не проблема, чтобы сохранить его в комплекте в onSaveInstanceState()
, Но! Это плохая идея, чтобы получить его из комплекта в onCreate()
потому что мне нечего обновлять! Чтобы прояснить это, псевдокод:
onCreate()
{
elementId = getIdFromBundle();
if (elementId == null)
createNewListFromZero();
}
onSaveInstanceState()
{
putIdToBundle(elementId);
}
onActivityResult()
{
updateOnlyOneListElement(elementId);
}
Поэтому я не могу обновить элемент по его идентификатору, потому что система фактически уничтожила систему. И мне нужно восстановить его. И у меня есть последовательные звонки onCreate(), onActivityResult()
, Вопрос в том, как мне разделить логику между этими двумя методами, чтобы создать \ обновить мой список элементов в правильном порядке?
1 ответ
Вы должны взглянуть на сохранение состояния активности в onSaveInstanceState
, Этот пакет будет возвращен в onCreate после перезапуска действия. Посмотрите на жизненный цикл деятельности
http://developer.android.com/reference/android/app/Activity.html
Класс деятельности Javadoc:
Обратите внимание на столбец "Killable" в приведенной выше таблице - для тех методов, которые помечены как подлежащие уничтожению, после того, как этот метод вернет процесс, в котором действие может быть уничтожено системой в любое время без выполнения другой строки ее кода. Из-за этого вы должны использовать метод onPause() для записи любых постоянных данных (таких как пользовательские изменения) в хранилище.
In addition, the method onSaveInstanceState(Bundle) is called before placing the activity in such a background state, allowing you to save away any dynamic instance state in your activity into the given Bundle, to be later received in onCreate(Bundle) if the activity needs to be re-created