Как контролировать поток действий - кнопка "Назад" и кнопка "Домой"
У меня есть 3 действия в моей заявке:
Activity1 -> Activity2 -> Activity3
Внутри Activity3, если пользователь нажимает Back, я хотел бы вернуться к Activity2. В событии onPause Activity3 я добавил finish()
заявление. Возможно, в этом даже нет необходимости, но я хотел убедиться, что это действие очищено. Это отлично работает.
Однако в то время как в Activity3, если пользователь нажимает Home или запускает новое приложение (через панель уведомлений или каким-либо другим способом), я хочу, чтобы Activity3 и Activity2 завершались. Если пользователь возвращается в это приложение, он должен продолжить с Activity1.
Я понял, как это сделать, но я не могу понять, как справиться с обоими случаями, если это вообще возможно. Можно ли перехватить кнопку "Назад" в Activity3 и отправить сообщение обратно в Activity2, сказав, что не нужно finish()
? Кажется, что действия следуют одному и тому же жизненному циклу (пауза, остановка) независимо от того, что вы делаете, чтобы отправить их в фоновый режим.
Просто чтобы ответить на вопрос, почему я хочу такого поведения, представьте, что Activity1
это экран входа в систему, Activity2
это экран выбора, и Activity3
это экран контента. Если я нажму "Назад" со страницы содержания, я хочу сделать новый выбор. Если я выхожу любым другим способом (Домой, панель уведомлений), я хочу, чтобы пользователь "logged out"
,
Заранее спасибо за помощь.
4 ответа
Я еще раз ответил на свой вопрос. Я опубликую свое решение здесь, если оно кому-то поможет.
В событиях onPause Activity2 и Activity3 я добавил finish(). Это учитывает случай, когда пользователь нажимает кнопку "Домой" или отвечает на событие панели уведомлений во время этих действий. Поскольку оба эти действия завершены, если пользователь вернется в приложение, он получит Activity1 (теперь в верхней части стека).
В Activity3 я добавил ловушку onKeyDown для клавиши "Назад". Так как Activity2 был убит, когда он перешел на паузу, мы должны запустить новый Activity2 из Activity3. После запуска Activity2, Activity3 затем заканчивается. Вот код для Activity3's onKeyDown:
public boolean onKeyDown(int keyCode, KeyEvent event){
if(keyCode == KeyEvent.KEYCODE_BACK) {
Intent Act2Intent = new Intent(thisActivity, Activity2.class);
startActivity(Act2Intent);
finish();
return true;
}
return false;
}
Вы также можете дать Activity1 android:clearTaskOnLaunch
атрибут в вашем AndroidManifest.xml.
По основному виду деятельности добавьте:
android: launchMode = "singleTask" android: clearTaskOnLaunch = "true"
На остальных добавить:
android:finishOnTaskLaunch="true"
Таким образом, он прекратит любую активность при возврате в приложение после нахождения в фоновом режиме.
@RMS2 ответ, который вы предложили... это обеспечит обратную функциональность? Я также столкнулся с подобной проблемой, поэтому вместо переопределения onpause и возобновления я переопределил метод onUserLeaveHint(). Таким образом, мое приложение знает, когда пользователь нажимает кнопку "Домой" и завершает действие.