Полагаю, что MainActivity (вместо MessageActivity-> state (1 или 2)) запустится в следующий раз после перезапуска приложения (это правильно?)
Нет, я не знаюне верю, что это правильно, в зависимости от того, что ваш код делает в onCreate ().Конечно, не нужно , чтобы быть правильным, если вы поступите правильно.Простой способ проверить это - повернуть экран, на котором воссоздаются текущие действия, если только вы не изменили поведение изменения конфигурации по умолчанию.
Я рекомендую внимательно прочитать этот раздел в документации для Android:
http://developer.android.com/guide/topics/fundamentals/activities.html#SavingActivityState
В частности:
, даже если вы ничего не делаете и не реализуете onSaveInstanceState (), часть состояния активности восстанавливается стандартной реализацией класса Activity onSaveInstanceState().В частности, реализация по умолчанию вызывает onSaveInstanceState () для каждого представления в макете, что позволяет каждому представлению предоставлять информацию о себе, которая должна быть сохранена.Почти каждый виджет в платформе Android реализует этот метод соответствующим образом, так что любые видимые изменения в пользовательском интерфейсе автоматически сохраняются и восстанавливаются при воссоздании вашей деятельности.Например, виджет EditText сохраняет любой текст, введенный пользователем, а виджет CheckBox сохраняет независимо от того, отмечен он или нет.Единственное, что от вас требуется - предоставить уникальный идентификатор (с атрибутом android: id) для каждого виджета, для которого вы хотите сохранить его состояние.Если у виджета нет идентификатора, он не может сохранить свое состояние.
Это означает, что если вы не вводите какое-либо состояние пользовательского интерфейса при любых вызовах onCreate()
, вашСтек активности и состояние пользовательского интерфейса будут восстановлены.
Лично мой предпочтительный подход - сохранять как можно меньше состояний в переменных-членах моих действий, сохранять и восстанавливать его с помощью onSave/RestoreInstanceState()
и полагаться на реализации по умолчаниюсохранить оставшуюся часть пользовательского интерфейса (текстовое поле и т. д.).Данные, которые должны сохраняться между сессиями, я фиксирую прямо в своей БД или настройках, как только она изменяется (например, в обработчике по нажатию).Это означает, что мне не нужно беспокоиться о жизненном цикле активности для этого.В максимально возможной степени мой пользовательский интерфейс просто отображает данные в моей БД (с использованием CursorAdapter и т.stack:
Когда пользователь покидает задачу, нажав клавишу HOME, ... Система сохраняет состояние каждой активности в задаче.Если впоследствии пользователь возобновит задачу, выбрав значок запуска, который начал задачу, задача выходит на передний план и возобновляет действие в верхней части стека.
(см. http://developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html)