Android 系统。退出(0)不会关闭我的所有活动吗?

Android 系统。退出(0)不会关闭我的所有活动吗?,android,android-activity,Android,Android Activity,我有两个活动,所以活动1转到活动2,然后在活动2上我有一个退出按钮。但当我点击它时,它只会退出活动2并再次返回活动1。基本上感觉就像我又开始了应用程序。我不知道为什么 这是我的密码 Button btExit = (Button) findViewById(R.id.btExit); btExit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(Vi

我有两个活动,所以活动1转到活动2,然后在活动2上我有一个退出按钮。但当我点击它时,它只会退出活动2并再次返回活动1。基本上感觉就像我又开始了应用程序。我不知道为什么

这是我的密码

Button btExit = (Button) findViewById(R.id.btExit);
    btExit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            finish();
            System.exit(0);
        }
    });
这是终止android应用程序的一种糟糕方式。Android在自己的操作系统中管理它

您可以根据其相应的意图启动Home应用程序:

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
希望这有帮助

编辑:-

那么我想你的目标是完成所有堆积起来的活动

这是:-

按如下方式结束之前的所有活动:

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

if( getIntent().getBooleanExtra("Exit me", false)){
    finish();
}
结果将与上面相同,但由于所有堆叠的活动都已关闭,当您返回应用程序时,它必须从您的主要活动(即启动器活动)开始


希望这有帮助。

不要使用
系统。退出


如果您想让用户从任何
活动中关闭应用程序,我建议使用
startActivityForResult
,在第一个
活动中检查
onActivityResult
中的返回值,并在那里调用
finish()

您可以模拟按下home按钮:

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
但这不会关闭应用程序


要关闭它,您可以使用finish()和SharedReference标志,并在单击按钮时设置标志。在其他活动中,检查标志并完成()如果设置了标志,则通过调用
finish()完成第一个活动在传递开始下一个活动的意图后单击。

系统。退出(0)不适用于关闭应用程序
ActivityManager am=(ActivityManager)getSystemService(ACTIVITY_服务);
am.killbackgroundprocesss(“com.root.abc”);
System.runFinalizersOnExit(true);
系统出口(0);
添加清单权限
使用
finishafinity()
退出应用程序


finish()
将仅从活动堆栈中清除活动。

在活动1中的startActivity(Activity2)之后调用finish()。。建议不要使用系统。退出(0)@如果用户按“后退”键而不是按钮,这将不起作用。@MaciejGórski:是的,你是对的。实现这一点的最好方法是(在其中一个答案中提到)。或者,您可以使用MaciejGórski的建议从ActivityA调用ActivityB,使用
startActivityForResult()
@MaciejGórski启动主应用程序(或使用
moveTaskToBack()
)不会更改此任务的当前状态。这意味着,使用此示例,当用户从主屏幕再次启动此应用程序时,它将把现有任务(包含Activity1和Activity2)带回到前面,并显示用户Activity2(这可能不是OP希望发生的事情。@DavidWasser我知道。这就是为什么我的答案不同。我的评论是简化CRUSADER和Nunu的答案。CRUSADER。我尝试了你的代码。它确实把我带出了我的应用程序,但它没有关闭它,当我再次使用它时…它会在我离开它的地方打开…你能过来吗o?请清除您的概念。此方法将重新启动您的
MainActivity.class
。启用主应用程序不会更改此任务的当前状态。这意味着,使用此示例,当用户从主屏幕再次启动此应用程序时,它将带来现有任务(包含Activity1和Activity2)回到前面并显示用户活动2(这可能不是OP希望发生的事情。链接解决方案更好。为什么?finish不会关闭应用程序,只有activity会关闭。各位,请尝试了解,我们还有许多其他类不是从activity派生的。它们可能用于自动化数据库连接、存储登录id、用户名、上次查询结果……因此关闭activityvity不能解决生产环境中的问题。Aaa,cześćMaciek;)此解决方案不起作用
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
  ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
    am.killBackgroundProcesses("com.root.abc");
    
    System.runFinalizersOnExit(true);
    System.exit(0);


add Manifest permission
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />