清除堆栈活动和完成

时间:2013-09-05 06:52:53

标签: java android android-activity android-lifecycle

例如,

我有活动A,B,C,D

致电B

Intent intent = new Intent(A,B.class);

startActivity(intent);

然后,B呼叫C

Intent intent = new Intent(B,C.class);

startActivity(intent);

之后,C呼叫D

Intent intent = new Intent(C,D.class);

startActivity(intent);

在活动D中,我致电finish()。它将返回活动C。

我的问题是如何在调用finish()之前清除活动A,B,C,以便应用程序退出正常。

不建议在每个finish()上致电startactivity,因为该应用可以按回以前的活动以继续。

5 个答案:

答案 0 :(得分:2)

这应该可以肯定......

Intent intent = new Intent(D,A.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("close",true);
startActivity(intent);

and in oncreat of A activity u have to write
if (getIntent().getBooleanExtra("close", false)) {finish();
}
else {
{
 //ur previous code here
}

如果您有任何问题可以提出要求

答案 1 :(得分:0)

尝试添加FLAG_ACTIVITY_NEW_TASK

所以你的代码是:

Intent intent = new Intent(this, A.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

答案 2 :(得分:0)

FLAG_ACTIVITY_CLEAR_TOP
FLAG_ACTIVITY_SINGLE_TOP
FLAG_ACTIVITY_CLEAR_TASK
FLAG_ACTIVITY_NEW_TASK

确保如果一个实例已经在运行并且不是顶级的,那么它上面的任何内容都将被清除并且将被使用,而不是启动一个新实例(这在你去过活动A后很有用 - >活动B,然后你想从B回到A,但额外的标志不应该影响你的情况)。

答案 3 :(得分:0)

我在我的申请中使用以下内容。希望它会有所帮助。

Intent intent = new Intent(this, A.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // this will clear the stacks
intent.putExtra("exitme", true); // tell Activity A to exit right away
startActivity(intent);

并在活动A中添加以下内容:

protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);

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

答案 4 :(得分:0)

尝试使用Intent.FLAG_ACTIVITY_CLEAR_TOP

Intent intent = new Intent(this, A.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

见这里 http://developer.android.com/reference/android/content/Intent.html