我有一个包含多个活动的应用程序......所以假设用户正在导航活动堆栈 A->B->C。然后按主页按钮。现在,当用户单击小部件时,我只想将我的应用程序的现有/当前实例带到前台。我不想要应用程序的新实例。我希望活动 C 回到前台。
我尝试了launchMode,"singleTask" | "singleInstance"
但这并没有解决我想要的要求,因为它清除了当前实例并创建了一个带有活动A的新实例。
任何想法如何解决这个问题?
非常感谢!
我有一个包含多个活动的应用程序......所以假设用户正在导航活动堆栈 A->B->C。然后按主页按钮。现在,当用户单击小部件时,我只想将我的应用程序的现有/当前实例带到前台。我不想要应用程序的新实例。我希望活动 C 回到前台。
我尝试了launchMode,"singleTask" | "singleInstance"
但这并没有解决我想要的要求,因为它清除了当前实例并创建了一个带有活动A的新实例。
任何想法如何解决这个问题?
非常感谢!
我设法想出了一个解决方案。我设置了专门的启动模式....
android:launchMode="singleInstance"
每次用户再次点击小部件或应用程序图标时,都会启动默认活动 A。要在上次所在的位置打开应用程序,只需onCreate()
在类的方法中MainActivity
检查isTaskRoot()
. 如果为 false,finish()
则调用并且活动 A (MainActivity) 将不会出现,并且应用程序将打开到活动 B 中的位置。
使用 " 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 - 最后一段。
尝试将此添加到您的意图中
intent.setFlags( Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);