这是交易:我有一个Android应用程序需要每X秒(当前60秒)调用一个Web服务.此应用程序有多个选项卡,这些选项卡都需要与数据本身进行交互.一个是MapView,一个是ListView,然后第三个是无关紧要的,但最终还需要得到一些全局数据.问题是我希望我的主要活动有一个在后台运行的线程,获取结果,然后指示TabHost中的两个子活动使用最新数据更新自己.此外,当用户单击选项卡并触发onCreate/onResume活动时,我还想通过从主活动获取最新数据来强制重绘.我真的很茫然.我已尝试使用服务和一些ghetto静态方法将活动的实例传递给服务,以便在定时器触发时调用特定函数来更新其视图,但减速非常糟糕且代码只是丑陋难看丑陋.有什么建议?
编辑:所以我在tabhost活动中将其实现为计时器驱动的线程,然后我在每个子活动中都有计时器驱动的线程,然后获取数据(以同步的方式)并更新它们的地图/列表.它的速度要快得多,但仍然感觉有点破解,尤其是我在父活动中调用自定义函数的部分,如下所示:
((MainActivity)getParent()).getNearbyMatches();
Run Code Online (Sandbox Code Playgroud)
这增加了一个强烈耦合的元素,我并不十分兴奋,但从性能的角度来看,它比它更好.我很欣赏已经给出的答案,并将对内容提供商进行一些研究,但我不确定是否要回到服务模型.
每次有新数据时,为什么要更新所有子活动?这对我来说听起来效率低下.仅更新当前可见的活动.
一种可行的方法是通过自定义内容提供商.让您的服务更新您的活动的数据源,并获取当前可见的活动以收听此内容的更改.所以基本上,你在调用OnResume时注册到内容提供者,并在调用OnPause时注销.
根据经验,从不存储Activity的静态引用!! 你最终会发现丑陋的泄漏.如果它是您的应用程序必须的,那么至少使用WeakReferences
| 归档时间: |
|
| 查看次数: |
14927 次 |
| 最近记录: |