8

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

4

3 回答 3

17

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

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 中。也检查这个很好的例子

于 2013-08-14T08:04:30.017 回答
5

将标志FLAG_ACTIVITY_CLEAR_TOP添加到您的意图中,以在您启动 E 活动时清除其他活动表单返回堆栈,例如:

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

然后开始你的活动:

startActivity(intent)

更多信息:Task 和 BackStack

于 2013-08-14T07:15:31.720 回答
0

向您的项目添加标志,它将清除堆栈中的所有活动

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

这是清除堆栈中已经存在的活动的正确方法

希望这可以帮助..

于 2013-08-14T07:33:41.860 回答