【发布时间】:2010-01-22 09:14:07
【问题描述】:
我需要用新的活动替换当前活动。也就是说,我想启动一个新的活动,并从任务堆栈中删除当前的活动。
根据文档,似乎最好的方法是像往常一样使用Activity.startActivity 启动活动,然后立即调用Activity.finish 以关闭当前活动。
这是对这些 API 的有效用法还是我应该做其他事情?
【问题讨论】:
我需要用新的活动替换当前活动。也就是说,我想启动一个新的活动,并从任务堆栈中删除当前的活动。
根据文档,似乎最好的方法是像往常一样使用Activity.startActivity 启动活动,然后立即调用Activity.finish 以关闭当前活动。
这是对这些 API 的有效用法还是我应该做其他事情?
【问题讨论】:
是的。这种方式使用api很好。
【讨论】:
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_TASK_ON_HOME) 的区别吗,如@Jeremie D 的回答所示?
实现这一点的正确方法是使用以下方法:
Intent intent = new Intent(this,MyActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_TASK_ON_HOME);
startActivity(intent);
this.finish();
代码假定您在一个活动中,否则如果您使用片段,请使用 getActivity()
这样,活动就启动了,您正确设置了后退按钮的层次结构,并且还销毁了相应的活动。
【讨论】:
setFlags设置这些标志会发生什么?
尝试在意图标志中使用FLAG_ACTIVITY_TASK_ON_HOME、FLAG_ACTIVITY_NEW_TASK
【讨论】:
你可以在你的activity中添加android:launchMode="singleInstance",然后重写onNewIntent方法来更新日期
【讨论】:
您可以在开始活动时使用 FLAG_ACTIVITY_CLEAR_TASK。我还在清单中将我的活动的启动模式定义为 singleTask,但那是因为我想要新活动的行为。我认为,只要您将标志 FLAG_ACTIVITY_CLEAR_TASK 传递给 startActivity,无论您在新活动中使用何种启动模式,您都可以获得关于清除先前活动的内容。
【讨论】: