Когда пользователь нажимает кнопку "Назад" на намерение, приложение должно выйти. Как я могу гарантировать, что приложение завершает работу при нажатии кнопки "Назад"?
Как выйти при нажатии кнопки назад?
Ответ 1
Сразу после запуска нового действия с помощью startActivity
убедитесь, что вы вызываете finish()
, чтобы текущая активность не была уложена за новой.
ИЗМЕНИТЬ Что касается вашего комментария:
Что вы предлагаете, это не так, как обычно работает поток приложений Android, и как пользователи ожидают его работы. Что вы можете сделать, если хотите, чтобы убедиться, что каждый startActivity
, предшествующий этому действию, является startActivityForResult
и имеет прослушиватель onActivityResult
, который проверяет код выхода и возвращает пузыри обратно. Вы можете узнать больше об этом здесь. В принципе, используйте setResult
до завершения действия, чтобы установить код выхода по вашему выбору, и если ваш родительский актив получает этот код выхода, вы установите его в этом действии и завершите его, и т.д.
Ответ 2
В моей домашней деятельности я переопределяю "onBackPressed" на:
@Override
public void onBackPressed() {
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
поэтому, если пользователь находится в домашней активности и нажимает обратно, он переходит на главный экран.
Я взял код из Переход к главному экрану Programmatically
Ответ 3
Лучший пользовательский интерфейс:
/**
* Back button listener.
* Will close the application if the back button pressed twice.
*/
@Override
public void onBackPressed()
{
if(backButtonCount >= 1)
{
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
else
{
Toast.makeText(this, "Press the back button once again to close the application.", Toast.LENGTH_SHORT).show();
backButtonCount++;
}
}
Ответ 4
Почему бы пользователю не просто нажать кнопку "домой"? Затем они могут выйти из вашего приложения из любых ваших действий, а не только из определенного.
Если вы обеспокоены тем, что ваше приложение продолжает делать что-то в фоновом режиме. Обязательно остановите его в соответствующих командах onPause и onStop (которые будут активироваться при нажатии пользователем Home).
Если ваша проблема заключается в том, что вы хотите, чтобы в следующий раз пользователь нажимал на ваше приложение, чтобы начать с самого начала, я рекомендую поместить на экран какой-то элемент меню или кнопку пользовательского интерфейса, который возвращает пользователя к началу активности вашего приложения. Как твиттер в официальном твиттере и т.д.
Ответ 5
Приложение будет завершено только в том случае, если в заднем стеке нет действий. SO добавьте эту строку в ваш манифест android: noHistory = "true" ко всем действиям, которые вы не хотите возвращать в стек. И затем, чтобы закрыть вызов приложения finish() в OnBackPressed
<activity android:name=".activities.DemoActivity"
android:screenOrientation="portrait"
**android:noHistory="true"**
/>
Ответ 6
Использовать метод onBackPressed
@Override
public void onBackPressed() {
finish();
super.onBackPressed();
}
Это решит вашу проблему.
Ответ 7
Прежде всего, Android не рекомендует вам делать это в кнопке "Назад", а скорее использует предоставленные методы жизненного цикла. Кнопка "Назад" не должна уничтожать действие.
Действия добавляются в стек, доступные из Обзор (квадратная кнопка, поскольку они ввели конструкцию материала в 5.0), когда кнопка возврата нажата на последнем оставшемся мероприятии из стека пользовательского интерфейса. Если пользователь хочет закрыть приложение, он должен удалить его (закрыть) в меню "Обзор".
Ваше приложение несет ответственность, чтобы остановить любые фоновые задачи и задания, которые вы не хотите запускать, в методах жизненного цикла onPause(), onStop() и onDestroy(). Подробнее о жизненных циклах и их правильной реализации читайте здесь: http://developer.android.com/training/basics/activity-lifecycle/stopping.html
Но чтобы ответить на ваш вопрос, вы можете делать хаки для реализации точного поведения, которое вы хотите, , но, как я уже сказал, не рекомендуется:
@Override
public void onBackPressed() {
// make sure you have this outcommented
// super.onBackPressed();
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
Ответ 8
Чтобы выйти из приложения Android, просто используйте. в своей основной деятельности, или вы можете использовать файл манифеста Android для установки
android:noHistory="true"
Ответ 9
завершите свой current_activity с помощью метода finish() onBack method of your current_activity
а затем добавьте ниже строки в onDestroy текущего_активности для удаления Force close
@Override
public void onDestroy()
{
android.os.Process.killProcess(android.os.Process.myPid());
super.onDestroy();
}
Ответ 10
Я изменил ответ @Vlad_Spays, чтобы кнопка "Назад" работала нормально, если только она не является последним элементом в стеке, а затем запрашивает пользователя перед выходом из приложения.
@Override
public void onBackPressed(){
if (isTaskRoot()){
if (backButtonCount >= 1){
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}else{
Toast.makeText(this, "Press the back button once again to close the application.", Toast.LENGTH_SHORT).show();
backButtonCount++;
}
}else{
super.onBackPressed();
}
}