我正在试图找出访问多个Web服务的应用程序的最佳通用设计,并且有多个活动可以显示信息。
我实施最新Android应用程序的方式如下。我有一个IntentService
接收来自活动的请求以从Web服务获取信息。我的Service
通过ResultReceiver
通知活动有关请求的状态(已启动/错误/已完成)。在调用Web服务,获取结果(xml / json)并解析它之后,我将该信息放在ContentProvider
(由sqlite数据库备份)中,并使用ContentResolver
通知任何关于变化。活动会收到有关更改的通知(一些使用ContentObserver
,其他人使用SimpleCursorAdapter
并自动通知。
现在,我的方法存在问题:
IntentService
,但我认为这不是它的目的。我觉得我采用的方法对于这个特定的应用来说并不是最好的方法。它是来自Google I / O应用程序的部分灵感(我无法理解所有内容,例如更新的sqlite字段等)。一种替代方法是在所有活动中使用AsyncTasks。但是,我可以在哪里存储信息以便从其他活动中访问?在Application
的列表中?那个id管理怎么样?
我真的对您的意见/想法/建议感兴趣,如何让我的下一个应用程序更好,更有效地工作。
答案 0 :(得分:2)
你看过这个演讲了吗? http://www.youtube.com/watch?v=xHXn3Kg2IQE
我发现它是一个很好的灵感来源。 基本上,他们建议将服务助手(在您的情况下,作为您的意图服务的服务助手)构建为单例类。您可以跟踪正在进行的请求
通过这种方式,您可以跟踪正在执行的每种不同类型的正在进行的后台任务,并阻止任何其他同类请求。例如,如果您保留活动a并输入活动b,并且他们要求提供相同的Web服务查询,则可以检查由于活动a它仍在进行中。
从我在iosched app上看到的情况来看,它遇到的问题是如果活动被关闭,那么获取结果就会丢失。
有一个明确的日志说:
Log.w(TAG, "Dropping result on floor for code " + resultCode + ": "
+ resultData.toString());
我也不建议使用asynctask,因为结果也会丢失。
但是,请看一下谈话和幻灯片。