Как выйти из приложения и показать главный экран?
У меня есть приложение, где на главной странице у меня есть кнопки для навигации через приложение.
на этой странице у меня есть кнопка "Выход", которая при нажатии должна вывести пользователя на главный экран на телефоне, где находится значок приложения.
Как я могу это сделать?
18 ответов:
дизайн 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);
Это, вероятно, то, что вы ищете. Он закроет все приложение и перенесет вас на главный экран.
это хорошо работает для меня.
Закройте все предыдущие действия следующим образом: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 для удаления силы закрыть
android.os.Process.killProcess(android.os.Process.myPid()); super.onDestroy();
Если вы хотите завершить действие, вы можете просто позвонить
finish()
. Однако это плохая практика, чтобы иметь кнопку выхода на экране.
Не рекомендуется выходить из вашего приложения для Android. Смотрите это вопрос для более подробной информации.
пользователь всегда может выйти из приложения через кнопку home или в первом действии через кнопку Назад.
некоторые действия на самом деле вы не хотите, чтобы открыть снова, когда кнопка Назад нажата такая активность экрана заставки, активность экрана приветствия, окна подтверждения. На самом деле вам это не нужно в стеке действий. вы можете сделать это с помощью=> открыть манифест.XML-файл и добавить атрибут
android: noHistory= "true"
на эти мероприятия.
<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); }
или
в нажатой кнопке назад вы хотите выйти из этого действия, а также вы также не хотите добавлять это в стек действий. вызовите метод finish() внутри метода onBackPressed (). это не сделает закрыть все приложение. он пойдет на предыдущий активность в стеке.
@Override public void onBackPressed() { finish(); }
(Я пробовал предыдущие ответы, но они не хватает в некоторые моменты. Например, если вы не делаете
return;
после завершения действия выполняется оставшийся код действия. Также вам нужно отредактировать onCreate с возвратом. Если вы не работаете супер.метод 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 вызовет finish onDestroy () этого действия будет вызван, и он вернется к предыдущему действию в стеке действий... Так.. для выхода не вызывайте finish ();
вот что я сделал:
некоторая активность.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();
inonDestroy()
:android.os.Process.killProcess(android.os.Process.myPid()); super.onDestroy();
я попробовал приложения, используя следующий фрагмент кода, это сработало для меня. Надеюсь, это поможет вам. я сделал небольшую демонстрацию с 2 видами деятельности
первое действие
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); } } }
Дочерний субъект реализует метод exit
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(); } });