如何通知不活动的活动?

时间:2011-03-10 00:03:08

标签: android android-activity preferences flags

我的程序有几个活动。当一个活动在前台时,用户可以在那里做一些事情,并且应该通知另一个非活动(即停止和暂停)活动,这样当他们onResume()时,他们可以相应地采取行动。

我的问题是:前台活动如何枚举是否存在非活动活动?它是如何通知他们的?

我看过Intent和Broadcast,他们似乎不是正确的答案。我试图将事件发布到非活动的激活的Handler队列,但由于我不知道如何枚举它们,所以我也无法访问它们的处理程序。

帮助!谢谢!

(我不能只设置一个全局标志。因为当第一个非活动活动变为活动时,它会看到它,它会清除它。然后IA的其余​​部分将不知道。我无法设置计数器标志因为我不知道是否以及有多少IA在那里,所以每个人都来了。因为在我看来,唯一的方法就是让我知道谁在那里并逐一通知他们。)

3 个答案:

答案 0 :(得分:2)

  

我的问题是:前台活动如何枚举是否存在非活动活动?它是如何通知他们的?

你没有,你没有。

想想一个拥有多个网页的Web应用程序。 “前景网页”不会“枚举是否存在非活动网页”,更不用说“通知他们”了。从当前可见的网页的角度来看,它是唯一的。浏览器可能在其历史中可能包含其他网页这一事实并不重要。

Android活动也是如此。一项活动既不知道也不关心这个应用程序在RAM中是否有0,1,2或1337个其他活动(但是,可能性,它将远低于1337)。相反,应该有一致的中央数据模型(例如,数据库),并且每个活动都针对中央数据模型。

  

好的,这是否意味着Android不支持或鼓励一项活动主动通知另一项非活动活动?

正确。

  

因此,活动必须进行民意调查以获取信息?

不得多于或少于网页轮询以获取信息。这取决于你对“民意调查”的定义。

答案 1 :(得分:1)

首先,我怀疑你是否以正确的方式思考。活动应该询问有关启动的信息,不应该被另一项活动“通知”(我不会谈论startActivityForResult())。

当您在不同活动之间共享大量数据时,您应该认真考虑将它们存储在配置类中,SharedPreferences或数据库中。你说的主要逻辑问题是:

  

我不能只设置一个全局标志。因为当第一个非活动活动变为活动时,它会看到它,它会清除它。

为什么活动应该清除旗帜?当你告诉它清除它时它只会清除一个标志。所以由你来阻止活动清除你的旗帜。

答案 2 :(得分:1)

您可以考虑使用内容提供程序并调用ContentResolver.notifyChange()让感兴趣的活动知道某些内容已更改。