如何关闭所有活动并退出应用程序

时间:2016-07-14 12:32:18

标签: android android-intent

我的应用程序仅允许登录用户访问活动。如果用户注销,则共享首选项布尔值isLogged将设置为false,并且用户不应访问除LoginActivity之外的其他活动。

但是,我可以通过按后退按钮访问所有以前打开的活动。

我会在打开每个活动时使用finish();,但我希望用户在登录时仍然使用后退按钮。

我尝试过其他类似问题的解决方案,例如

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

在我的LoginActivity的onCreate()上添加了

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

当我按下注销选项时,会打开上一个活动。

有什么建议请帮帮我吗?

5 个答案:

答案 0 :(得分:6)

你应该使用这个标志,清除你的任务并创建一个新的

Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);

答案 1 :(得分:4)

试试这个

您需要在Intent中添加这些标志..

Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("EXIT", true);
startActivity(intent);
finish();

答案 2 :(得分:3)

if (getIntent().getBooleanExtra("EXIT", false)) {
        finish();
android.os.Process.killProcess(android.os.Process.myPid());
    }

答案 3 :(得分:2)

尝试在数组中添加所有活动,当您要删除时,只需将其从数组中删除并完成该活动。在这里查看我的答案Remove activity from stack

答案 4 :(得分:0)

我遇到了类似的情况。据我所知,即使我在开头调用finish()函数,整个onCreate()函数也会被执行。然后它会完成。在我的场景中,在onCreate()函数中,我调用另一个Activity。因此,即使主要活动在onCreate()之后完成,第二个活动仍然存在。所以我的解决方案是,

private boolean finish = false;

在主函数的onCreate()中,

if(intent.getBooleanExtra("EXIT", false)) {
        finish();
        finish = true;
    }

我检查了所有导航

if(!finish) {
        Intent intent = new Intent(MainActivity.this, LoginActivity.class);
        startActivity(intent);
        finish();
    }

我的退出功能是,

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