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

我试图找出什么是访问多个Web服务的应用程序的最佳通用devise,并具有显示信息的多个活动。

我实施我最新的Android应用程序的方式如下。 我有一个IntentService接收来自活动的请求,从Web服务获取信息。 我的Service通过ResultReceiver通知活动有关请求的状态(开始/错误/已完成)。 在调用Web服务之后,得到结果(xml / json)并parsing它,我把这些信息放到一个ContentProvider (由一个sqlite数据库备份)中,并使用一个ContentResolver来通知任何有关这些改变的活动。 活动得到有关更改的通知(有些使用ContentObserver和其他使用SimpleCursorAdapter并自动通知)。

现在,我的方法的问题:

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

我有这样的感觉,我采取的方法并不是真正的最好的这个特定的应用程序。 它部分来自Google I / O应用程序(我无法理解所有的东西,比如更新的sqlite字段等)。 另一种select是在所有的活动中使用AsyncTasks。 但是,我可以在哪里存储信息以便从其他活动访问? 在Application列表中? 那么IDpipe理怎么样?

我真的对你的意见/想法/build议感兴趣,我怎样才能使我的下一个应用程序更好,更有效地工作。

Solutions Collecting From Web of "一般应用程序devise(IntentService / ContentProvider / AsyncTask)"

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

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

通过这种方式,您可以跟踪正在执行的各种正在进行的后台任务,并阻止任何其他相同types的请求。 例如,如果您保留活动a并input活动b,并且要求提供相同的Web服务查询,则可以检查活动a是否仍在进行中。

从我在iOS应用程序上看到的情况来看,如果活动closures,则获取结果会丢失。

有一个明确的日志说:

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

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

但是,看看谈话和幻灯片。