Как выйти из приложения и показать главный экран?

У меня есть приложение, где на домашней странице у меня есть кнопки для навигации по приложению.

На этой странице у меня есть кнопка «EXIT», которая при нажатии должна вывести пользователя на главный экран телефона, где находится значок приложения.

Как я могу это сделать?

Solutions Collecting From Web of "Как выйти из приложения и показать главный экран?"

Дизайн Android не способствует удалению приложения по своему выбору, а скорее управляет ОС. Вы можете открыть приложение «Домой» соответствующим образом:

Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_HOME); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); 

Может быть, вы можете попробовать что-то вроде этого

Предположим, что в нашем приложении у нас есть ряд действий (скажем, десять), и нам нужно выйти непосредственно из этой деятельности. Мы можем сделать это, создать намерение и перейти к корневой деятельности и установить флаг в намерении как

 intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

Кроме того, добавьте дополнительные значения, например boolean

 intent.putExtra("EXIT", true); 

Затем в корневой активности проверьте значение boolean и в соответствии с этим вызовом finish () в onCreate() корневой активности

 if (getIntent().getBooleanExtra("EXIT", false)) { finish(); } 
 System.exit(0); 

Возможно, именно то, что вы ищете. Он закроет все приложение и перенесет вас на главный экран.

Сначала закончите свое приложение, используя метод finish();

А затем добавить ниже строки в onDestroy для удаления Force close

 android.os.Process.killProcess(android.os.Process.myPid()); super.onDestroy(); 

Это хорошо работает для меня.
Закройте все предыдущие действия следующим образом:

  Intent intent = new Intent(this, MainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.putExtra("Exit me", true); startActivity(intent); finish(); 

Затем в методе MainActivity onCreate () добавьте это, чтобы завершить MainActivity

  setContentView(R.layout.main_layout); if( getIntent().getBooleanExtra("Exit me", false)){ finish(); return; // add this to prevent from doing unnecessary stuffs } 

Если вы хотите закончить действие, вы можете просто называть finish() . Однако плохой практикой является кнопка выхода на экран.

Некоторые действия на самом деле вы не хотите открывать снова, когда нажимаете кнопку «Назад», например, «Активность заставки», «Активность экрана приветствия», «Подтверждение Windows». На самом деле вам это не нужно в стеке действий. Вы можете сделать это, используя => открыть файл manifest.xml и добавить атрибут

андроид: noHistory = "истина"

К этой деятельности.

 <activity android:name="com.example.shoppingapp.AddNewItems" android:label="" android:noHistory="true"> </activity> 

ИЛИ

Иногда вам нужно закрыть все приложение на определенной кнопке обратной кнопки. Здесь лучше всего открыть окно дома вместо выхода из приложения. Для этого вам необходимо переопределить метод onBackPressed (). Обычно этот метод открывает верхнюю активность в стеке.

 @Override public void onBackPressed(){ Intent a = new Intent(Intent.ACTION_MAIN); a.addCategory(Intent.CATEGORY_HOME); a.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(a); } 

ИЛИ

Нажав кнопку «Назад», вы хотите выйти из этого действия, а также не хотите добавлять это в стек активности. Call finish () внутри метода onBackPressed (). Он не будет закрывать все приложение. Он пойдет для предыдущего действия в стеке.

 @Override public void onBackPressed() { finish(); } 

Не рекомендуется выходить из приложения Android. См. Этот вопрос для получения более подробной информации.

Пользователь всегда может выйти из приложения через домашнюю кнопку или в первом действии с помощью кнопки «Назад».

(Я попробовал предыдущие ответы, но им не хватает в некоторых точках.Например, если вы не делаете return; после завершения операции, остающийся код активности запускается. Также вам нужно отредактировать onCreate с возвратом. Если вы не запустите super.onCreate () Вы получите ошибку времени выполнения)

Скажем, у вас есть MainActivity и ChildActivity .

Внутри ChildActivity добавьте следующее:

 Intent intent = new Intent(ChildActivity.this, MainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.putExtra("EXIT", true); startActivity(intent); return true; 

Внутри onCreate MainActivity добавьте это:

 @Override public void onCreate(Bundle savedInstanceState) { mContext = getApplicationContext(); super.onCreate(savedInstanceState); if (getIntent().getBooleanExtra("EXIT", false)) { finish(); return; } // your current codes // your current codes } 

Когда будет вызываться u завершение onDestroy () этого действия, и он вернется к предыдущему действию в стеке действий … Итак .. для выхода не вызывайте finish ();

Существует еще один вариант использования метода FinishAffinity для закрытия всех задач в стеке, связанных с приложением.

См. https://stackoverflow.com/a/27765687/1984636

Добавьте следующие строки после finish(); В onDestroy() :

 android.os.Process.killProcess(android.os.Process.myPid()); super.onDestroy(); 

Я попытался выйти из приложения, используя следующий фрагмент кода, это сработало для меня. Надеюсь, это вам поможет. Я сделал небольшую демонстрацию с двумя действиями

Первая деятельность

 public class MainActivity extends Activity implements OnClickListener{ private Button secondActivityBtn; private SharedPreferences pref; private SharedPreferences.Editor editer; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); secondActivityBtn=(Button) findViewById(R.id.SecondActivityBtn); secondActivityBtn.setOnClickListener(this); pref = this.getSharedPreferences("MyPrefsFile", MODE_PRIVATE); editer = pref.edit(); if(pref.getInt("exitApp", 0) == 1){ editer.putInt("exitApp", 0); editer.commit(); finish(); } } @Override public void onClick(View v) { switch (v.getId()) { case R.id.SecondActivityBtn: Intent intent= new Intent(MainActivity.this, YourAnyActivity.class); startActivity(intent); break; default: break; } } } 

Любое другое действие

 public class YourAnyActivity extends Activity implements OnClickListener { private Button exitAppBtn; private SharedPreferences pref; private SharedPreferences.Editor editer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_any); exitAppBtn = (Button) findViewById(R.id.exitAppBtn); exitAppBtn.setOnClickListener(this); pref = this.getSharedPreferences("MyPrefsFile", MODE_PRIVATE); editer = pref.edit(); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.exitAppBtn: Intent main_intent = new Intent(YourAnyActivity.this, MainActivity.class); main_intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(main_intent); editer.putInt("exitApp",1); editer.commit(); break; default: break; } } } 

Я сделал это с режимом наблюдателя.

Интерфейс наблюдателя

 public interface Observer { public void update(Subject subject); } 

Базовый предмет

 public class Subject { private List<Observer> observers = new ArrayList<Observer>(); public void attach(Observer observer){ observers.add(observer); } public void detach(Observer observer){ observers.remove(observer); } protected void notifyObservers(){ for(Observer observer : observers){ observer.update(this); } } } 

Детский предмет реализует метод выхода

 public class ApplicationSubject extends Subject { public void exit(){ notifyObservers(); } } 

MyApplication, которое ваша заявка должна расширять

 public class MyApplication extends Application { private static ApplicationSubject applicationSubject; public ApplicationSubject getApplicationSubject() { if(applicationSubject == null) applicationSubject = new ApplicationSubject(); return applicationSubject; } 

}

Базовая активность

 public abstract class BaseActivity extends Activity implements Observer { public MyApplication app; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); app = (MyApplication) this.getApplication(); app.getApplicationSubject().attach(this); } @Override public void finish() { // TODO Auto-generated method stub app.getApplicationSubject().detach(this); super.finish(); } /** * exit the app */ public void close() { app.getApplicationSubject().exit(); }; @Override public void update(Subject subject) { // TODO Auto-generated method stub this.finish(); } } 

Давайте протестируем его

 public class ATestActivity extends BaseActivity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); close(); //invoke 'close' } } 

Если вы хотите выйти из приложения. Затем используйте этот код внутри вашего нажатия кнопки. как:

 public void onBackPressed() { moveTaskToBack(true); android.os.Process.killProcess(android.os.Process.myPid()); System.exit(1); } 

Вот что я сделал:

SomeActivity.java

  @Override public void onBackPressed() { Intent newIntent = new Intent(this,QuitAppActivity.class); newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(newIntent); finish(); } 

QuitAppActivity.java

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); finish(); } 

В основном то, что вы сделали, очистило все действия из стека и запустило QuitAppActivity , чья единственная задача – выйти из приложения.

Если вы хотите выйти из приложения, поставьте этот код под свою функцию

 public void yourFunction() { finishAffinity(); moveTaskToBack(true); } //For an instance, if you want to exit an application on double click of a //button,then the following code can be used. @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 2) { // do something on back. From Android 16+ you can use the following: finishAffinity(); moveTaskToBack(true); } return super.onKeyDown(keyCode, event); }