#android
#Android
Вопрос:
Я пытаюсь запустить действие (Act2) из другого действия (Act1), и это происходит не так, как должно.
В отладчике я вижу, что в результате вызова startActivity() метод onCreate() act2 вызывается 3 раза (!! …), ошибка не отображается или поймано исключение, и, к сожалению, желаемый пользовательский интерфейс не отображается.
чтобы попытаться лучше понять, в чем проблема, я запускаю следующие 2 теста, которые показали ожидаемое нормальное поведение:
- когда я изменяю Act1 для запуска Act3 (вместо Act2, просто чтобы понять, проблема ли в Act1), act3 отображает свой пользовательский интерфейс, как ожидалось.
- когда Act4 запускает Act2, он запускается, как ожидалось, и отображает пользовательский интерфейс на экране.
Что касается кода, я запускаю активность обычным способом:
Intent intent = new Intent(Act1.this, Act2.class);
startActivity(intent);
Кто-нибудь сталкивался с такой вещью?
Спасибо.
Ответ №1:
Возможно, вы захотите ознакомиться с документацией по жизненному циклу деятельности.
onCreate будет вызываться только один раз за каждое время действия. Однако существует ряд ситуаций, которые могут привести к тому, что ваша активность будет прервана и возвращена к жизни. Таким образом, onCreate будет вызван снова.
Чтобы поддерживать это должным образом, вы можете сохранить информацию о состоянии в onSaveInstanceState и восстановить ее из пакета состояний, который вы получаете при создании.
Комментарии:
1. спасибо за быстрый ответ.
2. Я надеюсь, что это помогло бы вам.
3. спасибо за быстрый ответ. но я уже видел жизненный цикл, и все же я не понимаю, что заставляет мою активность работать нормально, когда она вызывается из другого контекста (и из текущего контекста — допустимая активация другого действия)
4. Ну, я расширяю существующее приложение, и есть код, который был вызван, который вызвал такое поведение при вызове Act1 несколько раз из-за некоторого сложного контекста. Итак, я исправил контекст, и ошибка сейчас не возникает. тем не менее, я не знаю, как найти «кто меня активировал?» (помимо поиска в коде «startActivity(Act1intent)») В любом случае спасибо за ответ!