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

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

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

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

Дизайн 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 и в соответствии с этим завершением вызова () в onCreate() корневой активности

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

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

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

  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();

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

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

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

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

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

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

андроид: noHistory = “истина”

к этим действиям.

   

ИЛИ

Иногда вам нужно закрыть все приложение на определенной кнопке с обратной кнопкой. Здесь лучше всего открыть окно дома вместо выхода из приложения. Для этого вам необходимо переопределить метод 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(); } 

(Я попробовал предыдущие ответы, но им не хватает в некоторых точках.Например, если вы не делаете 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 } 

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

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

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

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

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 , что завершит задачу.

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

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

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

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

 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 observers = new ArrayList(); 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 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); } 

100% отлично работает. это код для выхода из приложения onClick (метод)

  Button exit = (Button)findViewById(R.id.exitbutton); exit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { finish(); android.os.Process.killProcess(android.os.Process.myPid()); System.exit(1); Toast.makeText(getApplicationContext(), "Closed Completely and Safely", Toast.LENGTH_LONG).show(); } }); 

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

 public void onBackPressed() { moveTaskToBack(true); android.os.Process.killProcess(android.os.Process.myPid()); System.exit(1); } 
  • Как изменить цвет трека SwitchCompat
  • Android «Невозможно добавить оконный токен null не для исключения приложения»
  • Получить объект JSON из ответа HTTP
  • Фрагмент в ViewPager не восстановлен после popBackStack
  • Как сгенерировать QR-код для Android-приложения?
  • Фильтр шума данных акселерометра
  • Android 4.3: BLE: поведение фильтра startLeScan ()
  • Передача данных ArrayList в веб-службу SOAP в android
  • Android - как отменить регистрацию получателя, созданного в манифесте?
  • Обнаружение события касания при просмотре при перетаскивании с другого вида
  • записывать / сохранять аудио из уст за распознавание речи
  • Давайте будем гением компьютера.