首先:如果你想关闭当前的Activity,使用这个:
public void exit()
{
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
finish(); // <-- this added
}
第二:我不知道你为什么要使用这个退出方法(因为标准的后退功能完成了顶部活动)但是FLAG_ACTIVITY_CLEAR_TOP用于:
如果设置了,并且正在启动的 Activity 已经在当前任务中运行,那么不会启动该 Activity 的新实例,而是关闭它之上的所有其他 Activity,并且此 Intent 将被传递到(现在在顶部)作为新 Intent 的旧活动。
对于FLAG_ACTIVITY_NEW_TASK
如果设置,此活动将成为此历史堆栈上新任务的开始。
尝试使用这个:FLAG_ACTIVITY_CLEAR_TASK:
如果在传递给 Context.startActivity() 的 Intent 中设置,此标志将导致与活动关联的任何现有任务在活动启动之前被清除。也就是说,该活动成为一个空任务的新根,并且所有旧活动都已完成。这只能与 FLAG_ACTIVITY_NEW_TASK 结合使用。
public void exit()
{
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); // <-- this changed
startActivity(intent);
finish(); // <-- this added
}
对于您的第二个问题:如果您终止应用程序,则必须终止该应用程序。您可能正在运行一个后台服务,该服务使用意图再次启动应用程序,但如果不是,则应用程序不应在终止后运行。
也许检查您的应用程序入口点(您的<action android:name="android.intent.action.MAIN" />)活动并检查它是否正在接收任何意图或是否有任何其他活动正在接收意图。
编辑
这是让用户在退出应用之前按两次后退按钮的常用方法。只需将此添加到您的Activity:
private static final int TIME_INTERVAL = 2000;
private Handler backHandler = null;
boolean exit = false;
...
/**
*
*/
@Override
protected void onDestroy() {
super.onDestroy();
if(this.backHandler != null) {
this.backHandler.removeCallbacks(this.backRunnable);
}
}
/**
*
*/
@Override
public void onBackPressed() {
if(this.exit) {
super.onBackPressed();
return;
}
this.exit = true;
Toast.makeText(this, this.getResources().getString(R.string.text_exit), Toast.LENGTH_SHORT).show();
this.backHandler = new Handler();
this.backHandler.postDelayed(this.backRunnable, TIME_INTERVAL);
}
/**
*
*/
private final Runnable backRunnable = new Runnable() {
/**
*
*/
@Override
public void run() {
exit = false;
backHandler = null;
}
};
在下面的示例中,当用户在主屏幕中按下返回按钮时,会弹出一个带有消息的 toast。如果用户在给定的时间间隔内再次按下后退按钮,应用程序将关闭。