在活动开始之前完成所有活动

时间:2011-06-02 06:59:36

标签: android android-activity stack

我想完成在应用程序中运行的所有活动意味着要从堆栈中删除所有父活动。

我想在我的应用程序中本地实现注销功能,所以我在思考,我将完成之前开始的所有活动,并将再次开始登录活动..

3 个答案:

答案 0 :(得分:8)

我应该让你知道这不是android中的推荐行为,因为你应该让自己管理活动的生活圈。

但是,如果您确实需要这样做,可以使用FLAG_ACTIVITY_CLEAR_TOP

我在这里给你一些示例代码,其中MainActivity是应用程序中的第一个活动

public static void home(Context ctx) {
    if (!(ctx instanceof MainMenuActivity)) {
        Intent intent = new Intent(ctx, MainMenuActivity.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        ctx.startActivity(intent);
    }
}

如果要退出整个应用程序,可以使用以下代码并检查MainActivity以完全退出应用程序:

    public static void clearAndExit(Context ctx) {
    if (!(ctx instanceof MainMenuActivity)) {
        Intent intent = new Intent(ctx, MainMenuActivity.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        Bundle bundle = new Bundle();
        bundle.putBoolean("exit", true);
        intent.putExtras(bundle);
        ctx.startActivity(intent);
    } else {
        ((Activity) ctx).finish();
    }
}

希望这有帮助。

答案 1 :(得分:3)

如果你的目标是APi等级< 11

,请尝试这个
Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
ComponentName cn = intent.getComponent();
Intent mainIntent = IntentCompat.makeRestartActivityTask(cn);
startActivity(mainIntent);

答案 2 :(得分:2)

您可能正在寻找的是FLAG_ACTIVITY_CLEAR_TOP意图标志:

  

如果已设置,并且正在启动的活动已在当前任务中运行,则不会启动该活动的新实例,而是将关闭其上的所有其他活动,并将此Intent传递给(现在在最前面)作为新意图的旧活动。

Intent i = new Intent(..);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

然后以此意图启动Activity。

在文档中查看有关任务和后台堆栈的更多信息:Tasks and Back stack

但是要实现登录/注销到应用程序(如果它不与在线服务通信),您可以使用SharedPreferences。这种方式在应用程序启动时,您可以检查用户是否已登录(例如,在首选项中打开某些标志),并在应用程序退出时(例如按钮),您可以清除此标志。

杀戮/删除活动应留给系统。根据系统设计,Android OS负责应用程序的生命周期。

例如,检查Password Safe应用程序源。每次打开新的应用程序实例时都需要密码。