如何退出应用程序并显示主屏幕?

我有一个应用程序,在主页上我有button导航通过应用程序。

在那个页面上,我有一个button“退出”,当点击时,应该把用户带到应用程序图标所在手机的主屏幕上。

我怎样才能做到这一点?

Android的devise不喜欢退出应用程序的select,而是由操作系统来pipe理它。 您可以通过相应的Intent调出Home应用程序:

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

也许你可以尝试这样的事情

假设在我们的应用程序中,我们有一些活动(比如说十),我们需要直接从这个活动中退出。 我们可以做的是,创build一个意图,去根本活动,并在意图设置标志

 intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

另外,添加一些额外的布尔意图

 intent.putExtra("EXIT", true); 

然后在根活动中,检查boolean值的boolean并根据调用finish(),在根活动的onCreate()

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

可能是你在找什么。 它将closures整个应用程序并将您带到主屏幕。

首先使用方法finish();完成你的应用程序finish();

然后在onDestroy删除强制closures添加下面的行

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

这对我很好。
closures所有以前的活动如下:

  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() 。 然而,在屏幕上有一个退出button是不好的做法。

一些活动,实际上你不想再次打开时,按下这样的飞溅屏幕活动,欢迎屏幕活动,确认窗口。 其实你不需要这个活动堆栈。 你可以使用=>打开manifest.xml文件来做到这一点,并添加一个属性

机器人:noHistory = “真”

到这些活动。

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

要么

有时你想要closures整个应用程序在某个后退button按下。 这里最好的做法是打开主窗口,而不是退出应用程序。 为此,您需要重写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); } 

要么

在后退button中,您要退出该活动,并且也不希望将其添加到活动堆栈中。 在onBackPressed()方法内调用finish()方法。 它不会closures整个应用程序。 它将在堆栈中执行之前的活动。

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

不build议退出您的Android应用程序。 看到这个问题的更多细节。

用户可以始终通过主页button退出应用程序,或通过后退button退出第一个活动。

(我尝试了以前的答案,但他们缺乏一些点,例如,如果你不做一个return;在完成活动后,剩余的活动代码运行,你还需要编辑onCreate与返回如果你不运行super.onCreate ()你会得到一个运行时错误)

假设你有MainActivityChildActivity

里面的ChildActivity添加这个:

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

在MainActivity的onCreate里添加这个:

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

还有一个select,使用FinishAffinity方法来closures与应用程序相关的堆栈中的所有任务。

请参阅: https : //stackoverflow.com/a/27765687/1984636

当你打电话完成onDestroy()该活动将被调用,它将返回到活动堆栈中的前一个活动…所以..退出不要调用finish();

finish();后添加以下行finish();onDestroy()

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

这是我做的:

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

让我们testing一下

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

如果你想退出你的应用程序。 然后在你的button按下事件中使用这个代码。 喜欢:

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

如果你想退出应用程序把这个代码放在你的函数下

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