Android Activity 来自 Notification - FragmentManager backstack 为零

Android Activity from Notification - FragmentManager backstack is zero

我四处搜索但找不到答案。 我的app是基于fragments的,MainActivity是入口点。当用户单击通知时,我会使用 PendingIntent 触发所需的行为,其中包含关于需要调用哪个片段的特定标志。

当我需要的片段已经显示时,我的问题就出现了。当通过 PendingIntent 输入 MainActivity 时,fragmentManager.getBackStackEntryCount() 将 return 归零。我猜这是因为 activity 与我已有的 运行 不同。然后再次调用相同的片段,这弄乱了我的 UI(并且可能会崩溃,因为 Otto 总线已经被注册)。

我的问题是:当通知触发 activity 时,检测 运行 应用程序状态(即正在显示哪个片段)的最佳方法是什么?谢谢。

我猜你可以用 FragmentManager class 做到这一点。 你有几个有趣的方法。例如,findFragmentByTag(String tag) 使您能够知道是否存在具有特定 TAG 的片段。

此外,您确定您没有重新创建一个新的 Activity(在当前的之上)吗?

感谢@Gordak 的建议,我得以解决我的问题。我需要的是我的(待定)Intent 中的标志组合:

intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP|Intent.FLAG_ACTIVITY_CLEAR_TOP);

这样,如果调用的activity在最上面,它不会被销毁(从而保持FragmentManager的后台堆栈)但是方法onNewIntent(Intent intent)会被触发,让你对它做出反应.这在文档中描述 FLAG_ACTIVITY_CLEAR_TOP