如何在API 8中清除Stack中的所有活动?

时间:2014-04-29 06:23:53

标签: android android-intent android-activity

我正在开发一个我遵循层次结构的应用程序,有一个用户可以登录的选项,之后我将完成登录活动。现在,一旦用户登录,我将把他带到一个新的活动假设"活动A"。从这个活动开始,一个新的活动开始被称为"活动B"没有完成"活动A"。最后有一个名为"活动C"它来自"活动B"没有完成"活动B"。所以目前所有这三项活动都是堆栈。

现在,每个屏幕或活动都有一个名为Logout的选项,如果用户在"活动A",我刚刚完成活动和打开登录活动。对于这种情况,它的工作正常,但一旦我切换到"活动B"或活动C"然后,如果用户按下Logout,我应该怎么做才能删除堆栈中的所有活动,并且我必须打开登录活动,因为我已经完成登录成功。

我知道API 11中有一个FLAG用于清除堆栈中的所有活动: -

Intent i = new Intent(mContext, LoginGateway.class);
// set the new task and clear flags
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK)
startActivity(i);

但是我从API 8支持它。我想要一个可以用于API 8的解决方案,请帮助我找到它。 任何帮助都会很明显。谢谢。

4 个答案:

答案 0 :(得分:5)

Intent intent = new Intent(activity, LoginGateway.class);
ComponentName cn = intent.getComponent();
Intent mainIntent = IntentCompat.makeRestartActivityTask(cn);
activity.startActivity(mainIntent);

答案 1 :(得分:0)

尝试此变体

Intent i = new Intent(mContext, LoginGateway.class);
    i.addFlag(Intent.FLAG_ACTIVITY_NO_HISTORY | 
    Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
    startActivity(i);

答案 2 :(得分:0)

试试这个,我可以正常使用

// clear whole activity stack

    Intent intent = new Intent("clearStackActivity");
    intent.setType("text/plain");
    sendBroadcast(intent);

// start your new activity
Intent intent = new Intent(OrderComplete.this,
                    MainActivity.class);
startActivity(intent);

步骤:1

将这些行放在所有活动的onCreate()方法中,或者如果你有任何基本活动,你可以将它放在那里,那么就不需要放入所有活动。

private KillReceiver clearActivityStack;
clearActivityStack = new KillReceiver();
        registerReceiver(clearActivityStack, IntentFilter.create("clearStackActivity", "text/plain"));

步骤:2

将此课程置于您的基础活动

private final class KillReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            finish();
        }
    }

说明:

在上面的代码中我们创建了自定义广播接收器。我们正在基本活动中注册它,即在所有调用的活动中注册。

当我们想要完成所有活动时,我们只是广播意图,所以注册此接收者的所有活动都将通知并完成它们自己。

答案 3 :(得分:0)

听起来像你想要的FLAG_ACTIVITY_CLEAR_TOP。它自API 1起就可用。