1

我有一些活动一个接一个地执行而没有关闭(1->2->3->4)。我想从 4 中关闭 1,2,3 活动并执行一个新活动;编码:

        Intent intent = new Intent(UserpickActivity.this, CommunicationActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);              
        startActivity(intent);

UserpickActivity - 第 4 个活动,CommunicationActivity - 下一个活动。但是在这段代码之后,所有以前的活动仍然有效。如何关闭所有正在运行的活动并执行一些新活动?

4

4 回答 4

1

activity.finish();切换到其他活动后调用。这样,任何活动都不会保留在堆栈上。

    Intent intent = new Intent(UserpickActivity.this, CommunicationActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);              
    startActivity(intent);

    //YOUR_ACTIVITY.finish();

如果您希望将此活动从活动堆栈中删除,请取消注释上述行。

于 2013-05-13T12:43:40.983 回答
1

// 这将清除所有活动并开始新任务。

    Intent intent = new Intent(UserpickActivity.this, CommunicationActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);              
    startActivity(intent);
于 2013-05-13T12:44:19.457 回答
1

试试这个:

当您想CommunicationActivity从 Activity4 启动时,请改为执行以下操作:

Intent intent = new Intent(this, Activity1.class); // Your root activity
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // Will remove all other activities from the task
intent.putExtra("foo", true); // This is to tell Activity1 to launch Activity4
startActivity(intent);

Activity1.onCreate()执行以下操作:

super.onCreate();
if (getIntent().hasExtra("foo")) {
    // We should now launch CommunicationActivity and finish ourselves
    Intent intent = new Intent(this, CommunicationActivity.class);
    startActivity(intent);
    finish();
    return; // Don't continue the rest of onCreate()
}
// The rest of your onCreate() goes here

您只能用于CLEAR_TOP清除活动堆栈中的现有活动。这就是为什么你的使用CLEAR_TOP不起作用(因为CommunicationActivity在活动堆栈中不存在)。

此方法清除所有活动并再次启动根活动。当根活动onCreate()被调用时,它会检查 Intent 中是否有额外的“foo”,它会将其用作需要启动CommunicationActivity和完成自身的信号。这应该做你想要的。

于 2013-05-13T13:36:38.273 回答
-1

在活动清单中使用 android:nohistory=true。

        <activity
        android:name=".A"
        android:label="@string/app_name"
        android:noHistory="true" >
于 2013-05-13T12:42:07.003 回答