1

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

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

4

3 回答 3

1

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

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

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

于 2012-11-19T20:38:46.787 回答
0

“AsyncTask 必须子类化才能使用。” sez 机器人。

于 2012-11-19T20:37:53.080 回答
0

不要将 AsyncTask 声明为活动的内部类。在它自己的范围内声明这个类一次,你可以在任何地方使用它。至于传入传出的数据,可以将第一个参数设为String或者Uri,传入请求数据,也可以在AsyncTask中使用可以由activity设置的内部监听对象来接收调用当 onPostExecute 触发时返回。

编辑

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

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

于 2012-11-19T20:54:47.867 回答