弹出活动堆栈和savedActivityState == null

时间:2016-10-21 20:32:11

标签: android android-activity

我有以下Activity流程场景,这就像向导: A-> B-> C-> d

第一个活动A打开,用户执行某些操作,我确实在onSaveInstanceState中保存状态

然后,用户转到活动B,然后转到C,然后转到D,我可以随时点击back,返回活动A,状态正确恢复,savedActivityState就在那里。

我遇到的问题是,当用户访问D并且"确认"一切 - 我需要带他们回到A展示他们的工作成果。我使用此代码返回A并弹出整个堆栈:

// Return to main screen and pop stack
    Intent intent = new Intent(this, ScanSendActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(intent);

我希望这会有不同的行为(有savedActivityState),但看起来整个活动堆栈已清除,并且此活动A已作为新实例创建。

我如何回到我原来的"活动A并杀死B,C,D

1 个答案:

答案 0 :(得分:0)

  

...但看起来整个活动堆栈已被清除,并且此活动A已创建为新实例。

你是对的,这正是发生的事情。整个堆栈被清除,并且有一个新的A活动实例,这就是为什么你没有保存的实例。当您创建新的Intent时,您实际上是在创建一个新的Activity。

关于FLAG_ACTIVITY_CLEAR_TOP docs1

  

如果已设置,并且正在启动的活动已在当前任务中运行,则不会启动该活动的新实例,而是将关闭其上的所有其他活动,并将此Intent传递给(现在在最前面)作为新意图的旧活动。

这意味着虽然它不是一个新的Activity,但它是一个新的意图,将新的数据结构传递给Activity,这将删除savedInstanceState

要获取数据,我会在活动之间传递数据。如何执行此操作取决于数据,但您可以使用ParcelableBundleExtras