我有以下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
?
答案 0 :(得分:0)
...但看起来整个活动堆栈已被清除,并且此活动A已创建为新实例。
你是对的,这正是发生的事情。整个堆栈被清除,并且有一个新的A活动实例,这就是为什么你没有保存的实例。当您创建新的Intent时,您实际上是在创建一个新的Activity。
关于FLAG_ACTIVITY_CLEAR_TOP docs的1:
如果已设置,并且正在启动的活动已在当前任务中运行,则不会启动该活动的新实例,而是将关闭其上的所有其他活动,并将此Intent传递给(现在在最前面)作为新意图的旧活动。
这意味着虽然它不是一个新的Activity,但它是一个新的意图,将新的数据结构传递给Activity,这将删除savedInstanceState
要获取数据,我会在活动之间传递数据。如何执行此操作取决于数据,但您可以使用Parcelable
,Bundle
和Extras
。