【问题标题】:How to consume SOAP/REST web services on Android (Service/Broadcast/Intent/etc)如何在 Android 上使用 SOAP/REST Web 服务(服务/广播/意图/等)
【发布时间】:2011-08-12 15:40:23
【问题描述】:

是否有从 Android 应用程序使用 Web 服务的通用方法(协议除外)?我需要的是一个能够:

  1. 无论有什么活动都保持活力;
  2. 能够同时执行多个请求;
  3. 接受输入值并将输出值返回给正确的调用者;
  4. 能够放弃正在进行的操作(同时继续运行所有其他操作)并且如果不再需要输出值,则不返回输出值;
  5. (当然)异步运行。

有没有一种通用的方法可以做到这一点?我在使用服务时遇到了一些问题,主要是因为我无法放弃正在进行的操作,因此结果相互冲突。

【问题讨论】:

    标签: android rest soap webservice-client android-service


    【解决方案1】:

    您应该使用Service 来完成此任务。这是唯一设计用于处理后台长时间运行任务的组件。您很可能需要将此服务用作“本地绑定”来传递复杂的请求和响应而无需序列化,并执行通过Intents 实现的其他相对困难的任务。

    在此处阅读有关本地绑定服务的更多信息:Bound Services

    【讨论】:

    • 如果要在应用程序中执行操作,我会为此建议使用 AsyncTask 而非服务。您将受益于更清晰的结构(onPreExecute、doInBackGround、onPostExecute),并且实现起来更简单。听起来这不是 MacGyver 想要的,但我认为这是有用的信息。 (因此评论而不是答案)
    • Service 中的Binder 将有多种方法,一个用于对 Web 服务的每个请求。我应该如何区分每个回调?我应该将Binder 的方法传递给Listener 吗?如果我不需要回调,如何在Activity销毁之前销毁监听器?
    • 为什么不在服务中运行 AsyncTask 呢?那就是您可以使用从 AsyncTask 到您的服务的回调来调用事件处理程序,以便在服务响应时执行您想要的操作。
    • 就我个人而言,我不喜欢将 Web 服务调用投入活动。它使事情变得复杂,现在您需要非常小心地处理活动生命周期(如配置更改)。那里有很多陷阱。
    • @inazaruk,你有什么建议?
    【解决方案2】:

    嗯,您需要在这里组合一些东西。首先,您需要一个服务层使用Bound Service(继承)来实现它。您的 UI 活动必须通过 Intent 调用此服务。 然后,这个层将在与 UI 层不同的线程中执行,必须有一个 Rest Client 对象来执行服务调用。 这里你有很多方法,我推荐你Spring Rest实现以及Restlet

    由于是一个相当大的讨论,还有什么请告诉我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多