如何关闭另一个正在运行的活动?

时间:2013-05-13 12:39:51

标签: java android

我有一些活动,我一个接一个地执行而没有关闭(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 个答案:

答案 0 :(得分:1)

切换到其他活动后致电activity.finish();。这样就不会在堆栈上保留任何活动。

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

    //YOUR_ACTIVITY.finish();

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

试试这个:

如果要从Activity4启动CommunicationActivity,请执行以下操作:

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并完成自身所需的信号。这应该做你想要的。

答案 3 :(得分:-1)

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

        <activity
        android:name=".A"
        android:label="@string/app_name"
        android:noHistory="true" >