Android,为通知启动的活动推荐的Intent标志

时间:2010-11-08 23:35:52

标签: android notifications

我遇到了一个有多个活动的应用程序的特殊问题。我有一个绑定到服务的屏幕管理器类。该服务轮询服务器以获取数据。屏幕管理器根据数据启动活动A,B或C.它还允许用户选择显示其他活动,或者它可以根据服务中的新数据自动交换活动。目前所有导航都很有效,如果用户按下Home,当用户从Android主屏幕或最近运行的应用列表中按下应用图标时,适用的活动将返回到前台。

然后我必须实现一个新功能来显示图标和通知。我首先通过在每个Activities onPause中设置活动不再可见时显示通知来实现此功能。像魅力一样工作,并为用户提供第三个选项,在主页按钮按下后重新显示应用程序。但是,如果来自服务器的数据(当应用程序未显示时)导致屏幕管理器更新要显示的活动,则会出现问题。我觉得我的活动堆栈搞砸了。我已经尝试了一个不同的模型,其中屏幕管理器处理通知并始终显示通知,每当活动更新时用新的Intent更新它,但它仍然没有削减它。

当应用程序最小化并且数据发生变化时,我可以看到屏幕管理器在新Activity上调用startActivityForResult,看起来Android知道我们已经最小化并且不显示Activity。然后我也可以通过屏幕管理器调用来完成旧的顶级活动。

每个Activity当前在清单中设置为singleTop,在代码中设置为FLAG_ACTIVITY_SINGLE_TOP。当服务器上的数据没有改变时,我使用上面的任何一个来恢复应用程序我得到了我期望的并调用了Activity的onNewIntent。但是,当数据发生变化并且用户通过通知调用应用程序时,它会调用Activities onCreate。活动确实出现并运行,但是然后按下将我带到看起来像同一个Activity的另一个实例而不是退出。我只是仔细看看我的logcat,我看到2次调用Activity的onResume,但之后没有双打。

我觉得我可能只是错过了一些简单的东西,就像通知的意图中的另一个意图标志一样?谢谢你的任何想法!

1 个答案:

答案 0 :(得分:7)

  

杀死我的是服务器中的数据在未显示时发生变化。

我不知道这意味着什么。

  

我觉得我可能只是错过了一些简单的东西,就像通知的意图中的另一个意图标志一样?

我使用Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP来处理“将我带回到同一个Activity的另一个实例”问题,但就我而言,我有一个单活动应用程序。

FLAG_ACTIVITY_CLEAR_TOP的文档也说:

“此启动模式也可以与FLAG_ACTIVITY_NEW_TASK一起使用效果良好:如果用于启动任务的根活动,它会将该任务的任何当前运行的实例带到前台,然后将其清除为root state。这在从通知管理器启动活动时特别有用。“

还有FLAG_ACTIVITY_REORDER_TO_FRONT

“例如,考虑一个由四个活动组成的任务:A,B,C,D。如果D调用具有解析为活动B的组件的Intent的startActivity(),则B将被带到前面历史堆栈,使用此结果顺序:A,C,D,B。如果还指定了FLAG_ACTIVITY_CLEAR_TOP,则将忽略此标志。“

也许其中一种模式符合您的需求。