Java 在Android TabHost应用程序中实现活动间通信的最佳方法

Java 在Android TabHost应用程序中实现活动间通信的最佳方法,java,android,ipc,Java,Android,Ipc,交易是这样的:我有一个Android应用程序,需要每X秒(目前为60秒)调用一个web服务。此应用程序有多个选项卡,这些选项卡都需要与数据本身交互。一个是MapView,一个是ListView,然后第三个是不相关的,但最终还需要获取一些全局数据。问题是我希望我的主活动有一个在后台运行的线程,获取结果,然后指示TabHost中的两个子活动使用最新数据更新自己。此外,当用户单击选项卡并触发onCreate/onResume活动时,我还希望通过从主活动获取最新数据来强制重画。我在这里真是不知所措。我用

交易是这样的:我有一个Android应用程序,需要每X秒(目前为60秒)调用一个web服务。此应用程序有多个选项卡,这些选项卡都需要与数据本身交互。一个是MapView,一个是ListView,然后第三个是不相关的,但最终还需要获取一些全局数据。问题是我希望我的主活动有一个在后台运行的线程,获取结果,然后指示TabHost中的两个子活动使用最新数据更新自己。此外,当用户单击选项卡并触发onCreate/onResume活动时,我还希望通过从主活动获取最新数据来强制重画。我在这里真是不知所措。我用一个服务和一些犹太区静态方法尝试了这一点,将活动的实例传递给该服务,以便在计时器启动时调用特定函数来更新它们的视图,但是速度非常慢,代码也非常难看。有什么建议吗

编辑:所以我在tabhost活动中将其实现为计时器驱动的线程,然后在每个子活动中都有计时器驱动的线程,这些线程将获取数据(以同步方式)并更新它们的映射/列表。它的速度要快得多,但仍然感觉有点像黑客,特别是我在父活动中调用自定义函数的部分,如下所示:

((MainActivity)getParent()).getNearbyMatches();

这增加了一种强耦合的元素,我对此并不完全感到兴奋,但从性能的角度来看,它比以前好多了。我很感谢已经给出的答案,并将在内容提供商方面做一些研究,但我不确定是否要回到服务模型。

您可以在s中实现GUI更新,并在下载线程中注册实例。当新数据到达时,下载线程向处理程序发送消息。本质上,这就是问题所在。
您可以找到如何使用
处理程序的示例(展开“使用第二个线程的示例进程对话框”部分)。

为什么每次有新数据可用时都要更新所有子活动?对我来说,这听起来效率很低。仅更新当前可见的活动

一种可能的方法是通过。让您的服务将数据源更新为您的活动,并让当前可见的活动侦听此内容的更改。因此,基本上,在调用OnResume时向内容提供商注册,在调用OnPause时取消注册


根据经验,永远不要存储活动的静态引用你最终会出现难看的漏洞。如果您的应用程序必须这样做,那么至少使用,因此我找到了我相信的答案:。可以扩展此类以跟踪全局应用程序状态

AndroidManifest.xml
文件中,您可以在
android:name
属性中引用完全限定的自定义类,当应用程序启动时,它将被实例化


然后,任何活动都可以调用
“getApplication()”
,它将返回自定义应用程序类的实例,然后您可以根据自己的口味进行调整。

我希望我也知道如何执行此操作+1我如何在receiver类中检查它应该启动的活动是否已在运行?