Android,对于由通知启动的活动,建议使用哪些意图标志

Android,对于由通知启动的活动,建议使用哪些意图标志,android,notifications,Android,Notifications,我遇到了一个特殊的问题,一个有多个活动的应用程序。我有一个绑定到服务的screen manager类。该服务轮询服务器以获取数据。屏幕管理器根据数据启动活动A、B或C。它还允许用户选择显示其他活动,或者根据服务中的新数据自动交换活动。目前,所有的导航功能都很好,如果用户按下Home键,当用户按下Android主屏幕或最近运行的应用程序列表中的应用程序图标时,适用的活动将返回前台 然后我必须实现一个新功能来显示图标和通知。我首先通过在每个Activities onPause中设置通知,在活动不再可

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

然后我必须实现一个新功能来显示图标和通知。我首先通过在每个Activities onPause中设置通知,在活动不再可见时仅显示通知来实现这一点。它的工作非常有魅力,在按下Home(主页)按钮后,为用户提供了第三个重新显示应用程序的选项。但是,如果来自服务器的数据(当应用程序未显示时)导致屏幕管理器更新要显示的活动,则我有问题。我想我的活动堆搞砸了。此后,我尝试了一种稍有不同的模式,屏幕管理器处理通知,并始终显示通知,每当更新活动时,都会以新的意图对其进行更新,但它仍然无法对其进行剪切

当应用程序最小化且数据更改时,我可以看到屏幕管理器在新活动上调用startActivityForResult,似乎Android知道我们最小化了,并且不显示活动。然后,我还可以通过屏幕管理器调用来完成旧的top活动

每个活动当前都在清单中将标志设置为singleTop,并在代码中将标志\u Activity\u SINGLE\u TOP。当服务器上的数据没有更改时,我使用上述任何一种方法将应用程序拉回来,我得到了预期结果,活动的onNewIntent被调用。但是,当数据发生更改,用户通过通知调用应用程序时,它会在创建时调用活动。该活动确实会出现并运行,但按back键会将我带到类似于同一活动的另一个实例,而不是退出。我只是仔细看了一下我的日志,我看到有两个电话打到了活动的onResume上,但之后就再也没有双打了

我觉得也许我只是错过了一些简单的东西,比如通知意图上的另一个意图标志?谢谢你的建议


让我头疼的是服务器上的数据在不显示时发生了变化

我不知道这意味着什么

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

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

FLAG\u ACTIVITY\u CLEAR\u TOP
的文档还说明:

“此启动模式还可与FLAG_ACTIVITY_NEW_TASK配合使用,效果良好:如果用于启动任务的根活动,它会将该任务当前正在运行的任何实例置于前台,然后将其清除为根状态。这尤其有用,例如,从notification manager启动活动时。”

还有一个
标志\u活动\u重新排序\u到\u前端

例如,考虑一个由四个活动组成的任务:A、B、C、D。如果D调用StaseActivity(),其意图是分解为活动B的组件,则B将被带到历史堆栈的前面,由此产生的顺序:A、C、D、B。
也许其中一种模式适合您的需要。

“让我头疼的是,服务器上的数据在未显示时发生了变化。“对不起,我不该用俚语。我想说的是,它工作得很好-除了0,当屏幕管理器被告知更改显示的活动时,我发现这非常令人沮丧。感谢您的建议,我将尝试使用该附加标志。感谢您的建议,但设置该标志似乎不会改变行为。我想我发现了您的建议似乎不起作用的原因。我认为另一个后台线程阻止了启动活动的第一个调用的执行,因此当来自通知的意图触发时,它看不到堆栈顶部的活动。因此,活动会自行创建并显示。然后,当我用“后退”按钮取消它时,它将从堆栈中删除。@cbursk:我知道这已经是古老的历史了……但是你还记得你是否找到了阻止背景任务抑制startActivity的方法吗?我正面临着同样的问题,我正试图使用Runnable在startActivity开始之前进行短暂的延迟。谢谢,Pete@PeteH:对不起,我已经搬上另一个项目很久了,不记得了。祝你好运