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

bur*_*rsk 9 notifications android

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

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

当应用程序最小化和数据的变化,我可以看到屏幕管理程序调用startActivityForResult在新的活动,它看起来像Android的知道我们被最小化,并且不显示活动.然后我还可以通过屏幕管理器调用来完成旧的顶级Activity.

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

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

Com*_*are 7

杀死我的是来自服务器的数据在未显示时发生变化.

我不知道这是什么意思.

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

我曾经Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP处理过"把我带回到看起来像是同一个Activity的另一个实例"的问题,但在我的情况下,我有一个单活动的应用程序.

文档FLAG_ACTIVITY_CLEAR_TOP也说:

"此启动模式也可以与FLAG_ACTIVITY_NEW_TASK结合使用:如果用于启动任务的根活动,它将把任务当前正在运行的任务带到前台,然后将其清除为根状态.这在从通知管理器启动活动时尤其有用."

还有FLAG_ACTIVITY_REORDER_TO_FRONT:

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

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