清除活动后退堆栈

时间:2013-08-14 07:13:20

标签: android android-intent android-activity back-stack

我从活动A-> B-> C-> D-> E开始..当我从D-> E开始时,堆栈中应该没有活动但是,用户可以使用后退按钮从D开始转到C(没有刷新活动C,就像正常的后退功能一样)

3 个答案:

答案 0 :(得分:17)

您可以在要关闭的所有活动中添加BroadcastReceiver(A,B,C,D):

public class MyActivity extends Activity {
    private FinishReceiver finishReceiver;
    private static final String ACTION_FINISH = 
           "com.mypackage.MyActivity.ACTION_FINISH";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        finishReceiver= new FinishReceiver();
        registerReceiver(finishReceiver, new IntentFilter(ACTION_FINISH));
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();

        unregisterReceiver(finishReceiver);
    }

    private final class FinishReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction().equals(ACTION_FINISH)) 
                finish();
        }
    }
}

...并通过致电......关闭它们。

sendBroadcast(new Intent(ACTION_FINISH));

...在活动E中。也检查this nice example

答案 1 :(得分:5)

在您启动E活动时,将标志 FLAG_ACTIVITY_CLEAR_TOP 添加到您打算清除其他活动表格的目的,例如:

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

然后开始您的活动:

startActivity(intent)

有关以下内容的更多信息:Task and BackStack

答案 2 :(得分:0)

向你的itent添加标志,它将清除堆栈中的所有活动

Intent intent = new Intent(getApplicationContext(),MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |  Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

这是清除已经在堆栈中的活动的正确选择

希望这会有所帮助..