在Android中进行异步服务调用

时间:2012-11-19 20:35:04

标签: android

我正在尝试使用AsyncTask类在我的Android应用程序中进行异步服务调用,但是对于我的活动中的每个服务调用,我需要在我的应用程序中有一个子类来扩展AsyncTask。任何人都可以建议我这样做的更好方法???

在我的场景中,服务调用具有不同的返回类型,然后我需要为所有服务调用返回一个对象并根据它进行类型转换,有没有更好的方法呢?

3 个答案:

答案 0 :(得分:1)

这是你写的服务吗?如果是这样,您可以使服务本身异步,以便您可以对其进行即时返回并稍后通过回调通知的调用。这将消除对Activity的AsyncTasks的需求。

如果您无法更改服务,您可以做的一件事是拥有一个后台工作线程负责与服务进行交互,并使用处理程序从主线程向其发布消息。每个工作项完成后,工作线程使用另一个处理程序将结果传递回UI线程。

请参阅:http://developer.android.com/reference/android/os/Handler.html

答案 1 :(得分:0)

答案 2 :(得分:0)

不要将AsyncTask声明为您的活动的内部类。在它自己的范围内声明这个类一次,你可以在任何地方使用它。对于传入和传出的数据,您可以将第一个参数设置为String或Uri并传入请求数据,并且可以在AsyncTask中使用内部侦听器对象,该对象可以由活动设置以接收呼叫当onPostExecute触发时返回。

修改

我做了一个要点,以展示最简单的版本。使用示例AsyncTask派生类,您可以在整个应用程序中重用此类,并将其传递给您的所有端点,并在您的活动中(或您需要进行服务调用的任何其他地方)接收结果。如果你需要更广泛地实现这一点,你可以将输入对象从String更改为一些更复杂的数据结构,其中包含您需要传递给服务调用的任何内容(post params,http方法等),您可以更改签名如果要返回结构化数据而不仅仅是原始结果

,则返回OnPostExecuteListener接口

https://gist.github.com/80c59fb70e195ca142bb