一般应用程序设计(IntentService/ContentProvider/AsyncTask)

Cat*_*san 8 sqlite android

我正在试图弄清楚什么是访问多个Web服务的应用程序的最佳通用设计,并且具有显示信息的多个活动.

我实现最新Android应用程序的方式如下.我有一个IntentService接收来自活动的请求以从Web服务获取信息.我Service通过ResultReceiver关于请求的状态(已启动/错误/已完成)通知活动.在调用Web服务,获取结果(xml/json)并解析它之后,我将该信息放入ContentProvider(由sqlite数据库备份)并使用a ContentResolver来通知任何有关更改的活动.活动会收到有关更改的通知(一些使用ContentObserver和其他使用SimpleCursorAdapters并自动通知).

现在,我的方法存在问题:

  • 每次我输入活动时,我都会通过上述方法从Web服务请求信息,并删除该特定表中的所有行,填入新信息并通知活动.因此,如果用户按下然后再次进入,我再次完成整个舞蹈.我想我应该在数据库中添加一些字段,以确定最后更新的时间等等,但我不知道如何继续进行.建议?我认为一种替代方案是使用警报并以特定间隔触发更新.但在我的情况下,规范要求每次进入活动时检查Web服务.
  • 当我调用Web服务时,我在活动中显示一个不确定的进度条,而不是其他视图(其中包含先前获取的信息,并且位于数据库中直到Web服务调用完成)但是用户可以开始与视图交互这不好(信息可能会从数据库中消失).有什么方法可以禁用交互?想到了ProgressDialog.
  • 如果我快速完成不同的活动,IntentService会被先前的Web服务调用阻止,并且需要更长时间才能进入我的最新Web服务调用.我可以IntentService为每个Web服务创建多个,但我不认为这是它的目的.

我觉得我采用的方法对于这个特定的应用来说并不是最好的方法.它部分受到Google I/O应用程序的启发(我无法理解所有内容,例如更新的sqlite字段等).一种替代方法是在所有活动中使用AsyncTasks.但是,我可以在哪里存储信息以便从其他活动中访问?在列表中Application?id管理怎么样?

我真的对您的意见/想法/建议感兴趣,如何让我的下一个应用程序更好,更有效地工作.

fed*_*aol 2

你查过这个谈话吗?http://www.youtube.com/watch?v=xHXn3Kg2IQE

我发现它是一个很好的灵感来源。基本上,他们建议将服务助手(在您的情况下,您的意图服务的服务助手)构建为单例类。您可以跟踪正在进行的请求

通过这种方式,您可以跟踪您正在执行的每种不同类型的正在进行的后台任务,并阻止任何其他同类请求。例如,如果您离开活动 a 并进入活动 b,并且它们请求相同的 Web 服务查询,则您可以检查它是否由于活动 a 而仍在进行中。

从我在 iosched 应用程序上看到的情况来看,它会遇到以下问题:如果活动关闭,则获取结果会丢失。

有一个明确的日志说:

Log.w(TAG, "Dropping result on floor for code " + resultCode + ": " + resultData.toString());

我不建议也使用 asynctask,因为结果也会丢失。

不过,请看一下演讲和幻灯片。