退出安卓应用程序

9
如何关闭一个有多个活动状态的Android应用程序?

“_in active state_” 是什么意思? - Octavian Helm
最终我成功退出了应用程序。很快会更新我所遵循的方法。 - includeMe
1
我使用了以下三个步骤:1)使用 startActivityForResult(....) 代替 startActivity 2)当退出按钮被按下时,写入以下内容 setResult(RESULT_CLOSE_ALL); finish();3)@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch(resultCode) { case RESULT_CLOSE_ALL: setResult(RESULT_CLOSE_ALL); finish(); } super.onActivityResult(requestCode, resultCode, data); } - includeMe
8个回答

14

一篇名为“退出Android应用程序”的博客文章将展示如何退出Android应用程序:

当用户希望退出所有打开的活动时,他们应该按下一个按钮,该按钮会加载运行应用程序时第一个Activity,在我的情况下是“LoginActivity”。

    Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.putExtra("EXIT", true);
    startActivity(intent);

以上代码清除了除LoginActivity之外的所有活动。LoginActivity是用户运行程序时首先启动的活动。然后将此代码放入LoginActivity的onCreate中,以在传递“Exit”消息时发出自我销毁的信号。

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

如果您想要一个简单的解决方案,请检查我的答案 - includeMe

9
我有一个简单的解决方案
从活动中按退出按钮,使用以下源代码返回到第一个活动。请阅读 FLAG_ACTIVITY_CLEAR_TOP 的文档。
Intent intent = new Intent(ExitConfirmationActivity.this, FirstActivity.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(intent);

现在,使用finish()覆盖第一个活动的onResume()方法。

嗨@dsc。我怎么找到第一个活动?我有一个媒体播放器应用程序。它在通知中显示当前曲目。当用户点击通知时,它会显示播放器屏幕。我还有一个主屏幕。如何在后台堆栈中找到第一个活动? - syloc
@syloc:第一个活动是指在应用程序启动时显示的活动。 - includeMe
同时,您可以使用以下代码找到第一个活动:ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);List<ActivityManager.RunningTaskInfo> taskInfo = activityManager .getRunningTasks(1); ComponentName componentInfo = taskInfo.get(0).baseActivity; - includeMe
假设我启动了应用程序并进入主屏幕。然后播放一首歌曲,该歌曲现在出现在通知中。接着我按返回按钮,直到回到Android主屏幕。然后我点击通知并再次进入应用程序。但是这时第一个活动变成了播放器屏幕。 - syloc
@syloc:编辑了我的上一个评论,componentInfo将始终返回堆栈中的第一个活动。 - includeMe

2

好的,您不应该关闭应用程序,因为系统会管理它。有关更多信息,请参阅其他答案中的帖子/主题。

但是,如果您真的非常想这样做,您仍然可以像任何其他Java应用程序一样调用System.exit(0);

编辑

ActivityManager actmgr = (ActivityManager) this.getSystemService (Context.ACTIVITY_SERVICE);
actmgr.restartPackage ("com.android.your.package.name");

我想起了一些事情。我曾试图使用这段代码重新启动我的应用程序,但它只能关闭我的应用程序。你可以尝试一下,看看它是否适用于你。


这是正确的。但是需要注意,这个调用可能很危险,特别是当有多个线程活动时。这些线程将被停止。而且可能会发生(墨菲定律说它会发生)线程停在开发人员不打算的状态下,这可能导致数据损坏... - mreichelt
@Shade 这对我不起作用...如果你那么确定的话,我会再检查一下。可能是我的应用程序出了其他错误 :( - includeMe
@Shade看到了你的回答,但那不是正确的方法。当我使用startActivityForResult而不是startActivity时,我能够退出应用程序。 - includeMe
@Shade 我能够使用那种方法重新启动我的应用程序。 - includeMe
@Shade,“FirstActivity”指的是我的应用程序的根活动。实际上,我并没有启动新的活动。通过使用“intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)”,它会检查是否已经启动了这样的活动,然后返回到该活动,关闭所有其他活动。当我关闭“FirstActivity”时,应用程序将被关闭。 - includeMe
显示剩余5条评论

2

2

1

我几周前问过一个类似的问题。请查看答案和评论以获取更多视角和可能的解决方案。

在我看来,退出应用程序取决于您的应用程序所做的事情和用户的期望。虽然我理解不设置退出按钮的原因,但我也相信这是应用程序设计师根据情况做出的选择。


0

一旦您的最后一个Activity失去焦点,Android将根据当前系统需求/空闲资源卸载您的进程。您不应该真正关心这个 - 只需使用生命周期onStart、OnStop等来管理您的状态。


0
如果你想退出一个Android活动,这将会把你带回到之前的活动或当前活动中特定位置的另一个活动。
finish();
System.exit(0);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接