我有一个包含多个活动的应用...所以假设用户正在导航活动堆栈A-> B-> C.然后按HOME按钮。现在,当用户点击Widget时,我只想将我的应用程序的现有/当前实例带到前台。我不想要应用程序的新实例。我希望活动C回到前台。
我尝试将launchMode发送到"singleTask" | "singleInstance"
,但这并不能解决我想要的要求,因为它会清除当前实例并创建一个带有活动A的新实例。
任何想法如何解决这个问题?
非常感谢!
答案 0 :(得分:2)
我设法找到了解决方案。我设置了专门的启动模式....
android:launchMode="singleInstance"
每次用户再次点击窗口小部件或应用程序图标时,都会启动默认活动A.要在应用的最后位置打开应用,请在onCreate()
课程的MainActivity
方法内查看isTaskRoot()
。如果为false,请调用finish()
,并且不会显示活动A(MainActivity),应用程序将打开到活动B中的位置。
答案 1 :(得分:2)
使用“singleInstance
”并不是一个好主意(出于很多原因)。
这是一种更好的方法 - 来自您的小部件意图处理程序:
Intent yourActivity = new Intent(context, YourActivity.class);
yourActivity.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(yourActivity);
您无需添加CLEAR_TOP
来召回活动C,但如果您想携带A或B,则需要它。
我只是发帖,因为在大约10个以上的类似帖子中,没有人真正指出了正确的做法。
http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP - 最后一段。
答案 2 :(得分:-1)
尝试将此添加到您的意图
intent.setFlags( Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);