Android,推荐使用什么Intent标志通过通知开始的活动

问题描述:

我遇到了具有多个活动的应用程序的一个特殊问题。我有一个绑定到服务的屏幕管理器类。该服务调查服务器的数据。屏幕管理器根据数据启动活动A,B或C.它还将允许用户选择显示其他活动,或者可以根据服务中的新数据自动换出活动。目前所有的导航工作都很好,如果用户按Home键,当用户从Android主屏幕或最近运行的应用程序列表中按下应用程序图标时,适用的活动会回到前台。Android,推荐使用什么Intent标志通过通知开始的活动

然后我不得不实现一个新功能来显示图标和通知。我首先通过在每个活动onPause中将活动设置为不可见时才显示通知来实现此目的。像魅力一样工作,并给用户第三个选项,在主页按钮按下后重新显示应用程序。但是,如果来自服务器的数据(当应用程序未显示时)导致屏幕管理器更新要显示的活动,我有问题。我认为我的活动堆栈被搞砸了。自从我尝试了一个不同的模型,其中屏幕管理器处理通知并始终显示通知,并在每次更新活动时使用新的Intent进行更新,但仍未切割。

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

每个活动目前拥有该标志在代码清单和FLAG_ACTIVITY_SINGLE_TOP设置为singleTop。当服务器上的数据没有变化时,我使用上述任何一种方法将应用程序重新启动,得到我期望的结果,并调用Activity的onNewIntent。但是,当数据发生变化并且用户通过通知调用应用程序时,它会调用Activities onCreate。该活动确实出现并运行,但后来按下后,我看到的是另一个相同活动的实例,而不是退出。我仔细看了一眼我的logcat,看到2个对Activity的onResume的调用,但之后没有翻倍。

我觉得我可能只是想失去一些简单的东西,就像通知的意图中的另一个意图标志?感谢您的任何想法!

什么是我的命是从服务器上没有显示时改变的数据。

我不知道这意味着什么。

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

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

FLAG_ACTIVITY_CLEAR_TOP的文件也说:

“这种发射方式也可以使用,效果良好结合FLAG_ACTIVITY_NEW_TASK:如果用于启动任务的根系活力,就会带来任何当前运行的实例将该任务放到前台,然后将其清除为根状态,这尤其有用,例如,从通知管理器启动活动时。“

还有FLAG_ACTIVITY_REORDER_TO_FRONT

”。例如,考虑一个任务由四个活动:A,B,C,D,如果d用解析为活性成分的意图调用startActivity() B,那么B将被带到历史堆栈的前面,结果为:A,C,D,B。如果FLAG_ACTIVITY_CLEAR_TOP也被指定,该标志将被忽略。“

也许其中一种模式适合你的需要

+0

“什么是杀我是服务器的数据在不显示时发生变化。”对不起,不应该使用俚语。正如试图说的那样,它的运行效果很好 - 除非屏幕管理器被告知要更改显示的活动,否则不会显示0,而且我发现非常令人沮丧。感谢您的建议,我会重试使用该附加标志。 – bursk 2010-11-09 00:55:04

+0

感谢您的想法,但设置该标志似乎并没有改变行为。 – bursk 2010-11-09 16:19:14

+0

我想我发现你的建议似乎没有奏效。我认为另一个后台线程阻止了第一次调用从执行中启动活动,所以当通知的意图触发时,它看不到堆栈顶部的活动。所以活动创建并显示。然后当我使用后退按钮解除它时,它将从堆栈中移除。 – bursk 2010-11-14 15:10:35