Android异步服务调用策略

时间:2009-09-29 14:43:19

标签: android asynchronous service

这是一个场景:

  1. 客户端远程调用服务(返回void)并提供 回调对象
  2. Service在后台线程上执行一些长时间运行的逻辑 然后使用回调对象来触发ether成功或失败 其中(因为这些操纵视觉元素)执行 活动#runOnUiThread块
  3. 该方案运行正常。问题是 - 我可以使用AsyncTask来制作 代码更简洁(如何?)并且在这方面有任何优势 那样的?

    或者我应该完全放弃客户端回调 执行远程服务调用,以便在其中返回一些值 的AsyncTask#doInBackground?

2 个答案:

答案 0 :(得分:3)

很难说AsyncTask是否会减少冗长,因为我们不知道您当前实现的详细程度。

对我来说,AsyncTask意味着我不必担心自己清理线程(例如,将某种杀戮工作发布到LinkedBlockingQueue我的后台线程正在等待)。它还删除了我用于创建用于Job的自定义LinkedBlockingQueues类。并且,它简化了在UI线程上的最终工作。

在您的情况下,使用远程服务,UI线程问题不那么重要,因为活动需要自己处理。

我不知道你的#2和你的最后一段之间有什么区别。在这两种情况下,您的服务都将调用回调对象,该对象将使用runOnUiThread()之类的东西来安排在UI线程上完成的工作。

AFAIK,使服务执行任何异步工作的唯一两种方法是让客户端知道工作是通过广播Intent或回调对象完成的。广播Intents方便但公开(即其他代码可以观看它们)。

我怀疑我在这里可能没什么帮助,但我对你的情景知之甚少,无法提供更多细节。

答案 1 :(得分:0)

我有完全相同的问题:我正在开发一个地图活动,具有'延迟加载'功能(来自网络的xml,解析它,然后使用该解析创建的'items'更新我的地图。 ..)

我想知道实施它的最佳方式是什么......

  • 从线程启动的异步服务,通过Intent的更新通知?
  • 只是一个线程(没有服务,因为我不需要将它暴露给其他应用程序)w / callback
  • 带回调的asyncTask 我正在使用Android SDK性能分析工具traceview
  • 比较这些速度

我想Android-developper-group上的Android贡献者可以找到更准确的答案......