我是Android开发的新手,请原谅我的无知。
我有两个活动,A + B.如果从A-> B开始,A保持不变并且不会被破坏。当我从B-> A(使用后退按钮)返回时,活动A被破坏并再次创建,然后活动B被破坏。
我一直在寻找一种方法来保留活动A,所以当我回到B-> A时,A就像它一样被保留。我能够通过设置活动A launchMode来实现这一目标,如android:launchMode="singleTop"
有人可以解释一下这个初始行为吗?或者至少指导我阅读一些材料?当我按回B时,为什么A会被摧毁?
如果我想以编程方式实现android:launchMode="singleTop"
的效果,我应该抓住"返回"在B中调用并使用我自己的标志创建自己的Intent
?
将launchMode设置为singleTop是否达到我想要的正确方法?
答案 0 :(得分:1)
When I go back from B->A (using the back button), activity A gets destroyed and created again.
我认为你看待上述陈述的概念是错误的。
活动A永远不会被破坏,而是进入活动生命周期的onStop()
状态,当用户按下后退按钮时,如果你知道活动生命周期,它就会恢复
当当前活动开始另一个活动时,新活动将被推到堆栈顶部并获得焦点。 之前的活动仍在堆叠中,但已停止。当活动停止时,系统将保留其用户界面的当前状态。当用户按下“返回”按钮时,当前活动将从堆栈顶部弹出(活动被销毁),先前的活动将恢复(其UI的先前状态将恢复)。
编辑:
activity A gets destroyed and created again
在以下情况下可以这样做:
如果您在开始新活动时没有明确关闭第一项活动。
如果您覆盖第二个活动中的onBackPressed
以启动第一个活动
例如:
@Override
public void onBackPressed() {
startActivity(new Intent(this, FirstActivity.class));
}
答案 1 :(得分:1)
launchMode="singleTop"
定义中设置<activity>
。 / p>
有关详细信息,请参阅documentation for UP navigation。以下是相关位的引用:
要在用户按下应用程序图标时向上导航,您可以使用 NavUtils类的静态方法
navigateUpFromSameTask()
。当你 调用此方法,它完成当前活动并启动(或 恢复)适当的父活动。如果是目标父母 活动在任务的后台堆栈中,它被提出来。方式 提出取决于父母活动是否能够 处理onNewIntent()
电话:
- 如果父活动具有启动模式
<singleTop>
,或者向上意图包含FLAG_ACTIVITY_CLEAR_TOP
,则父活动为 带到堆栈的顶部,并通过它接收意图onNewIntent()
方法。- 如果父活动具有启动模式
<standard>
,并且向上意图不包含FLAG_ACTIVITY_CLEAR_TOP
,则父活动 弹出堆栈,该活动的新实例是 在堆栈顶部创建以接收意图。