我到处找,但找不到答案。我的应用程序是基于片段的,MainActivity
是入口点。当用户点击通知时,我将使用包含特定标志的PendingIntent
触发所需的行为,即需要调用哪些片段。
我的问题发生时,我需要的片段已经被显示。当MainActivity
通过PendingIntent
进入时,fragmentManager.getBackStackEntryCount()
将返回零。我猜这是因为活动是一个不同的实例比我已经运行。然后同样的片段再次调用,这搞砸了我的UI(和潜在的崩溃,因为Otto
总线已经被注册)。
我的问题是:什么是最好的方法来检测运行的应用程序的状态(即哪个片段正在显示)当活动从通知触发?谢谢。
我想你可以用FragmentManager类做到这一点。你有几个有趣的方法。例如,findFragmentByTag(String tag)
使您能够知道具有特定TAG的Fragment是否存在。
还有,你确定你没有重新创建一个新的活动(在当前活动的顶部)吗?
多亏了@Gordak的建议,我才能够解决我的问题。我需要的是在我的(pending)Intent中组合一个标志:
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP|Intent.FLAG_ACTIVITY_CLEAR_TOP);
这样,如果被调用的活动是在顶部,它不会被销毁(从而保持FragmentManager的backstack),但方法onNewIntent(Intent intent)
将被触发,让您对它作出反应。的文档中对此进行了描述FLAG_ACTIVITY_CLEAR_TOP
。