如何退出所有活动(包括恢复活动)

时间:2017-08-17 12:06:29

标签: android

我有4项活动。第一个是泼水活动,第二个是主菜单活动,第3个活动是主要活动的特定选项,第4个活动是第3活动的结果。我在清单文件中使用noHistory="true"作为第二个活动。我在所有活动的选项菜单中都有退出选项。一旦我再次退出应用程序中的前三个活动,我打开应用程序意味着它将启动应用程序(没有恢复活动)但是当我退出第四个活动然后再次打开应用程序意味着它显示第三个活动而不是启动应用程序。 / p>

选项菜单中的退出代码为

flag_activity_clear_top
flag_activity_no_history

但之前的活动并未结束。 我们如何退出所有活动(包括恢复活动)?

如果我对第三个活动使用noHistory="true"属性意味着它正常工作,但是当我按下主屏幕然后再次打开应用程序时它会显示启动活动而不是恢复活动。所以我避免在第三个活动中使用noHistory属性。

请为退出所有活动提供解决方案。

3 个答案:

答案 0 :(得分:0)

使用Intent

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

在OnCreate中添加了您的所有活动

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

答案 1 :(得分:0)

每次启动应用程序并使用相应的导航时,使用sharePreference并检查共享首选项内的值(在onResume或OnStart()内)。

答案 2 :(得分:0)

要关闭所有活动,您可以尝试致电

finishAffinity();

此方法在当前任务中完成当前活动及其下方所有具有相同亲和力的活动。

finishAffinity()可以从Context调用,即(Activity,Service等) 如果每次关闭应用程序时要关闭所有活动,只需在OnDestroy()方法或onClick中调用finishAffinity

@Override
    protected void onDestroy() {
        super.onDestroy();
        finishAffinity();
    }

finishButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            finishAffinity();
        }
    });

menu

的示例
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();

    if (id == R.id.exit_item) {
        finishAffinity();
    }
    return super.onOptionsItemSelected(item);
}

并且您不应该使用任何标志来启动或关闭活动,只需在您想要退出应用程序并完成所有活动的地方调用finishAffinity()

在此视频中,您可以看到它的工作原理https://youtu.be/L5w8mhB9aNk