Android异步服务调用策略

标签 android asynchronous service

这是场景:

  1. 客户端对服务进行远程调用(返回 void)并提供 回调对象
  2. 服务在后台线程上执行一些长时间运行的逻辑 然后使用回调对象来触发以太成功或失败 (因为这些操作视觉元素)执行 Activity#runOnUiThread block

该场景运行良好。问题是 - 我可以使用 AsyncTask 来制作 代码不那么冗长(如何?)并且这样做有什么好处 就这样吗?

或者我应该完全摆脱客户端回调并且 执行远程服务调用改造后返回一些值 AsyncTask#doInBackground?

最佳答案

很难说 AsyncTask 是否会让事情变得不那么冗长,因为我们不知道您当前实现的冗长程度。

对我来说,AsyncTask 意味着我不必担心自己清理线程(例如,将某种终止作业发布到 LinkedBlockingQueue 我的后台线程是等待)。它还消除了我用来创建与 LinkedBlockingQueues 一起使用的自定义 Job 类。而且,它还简化了 UI 线程上的最终工作。

在您的情况下,使用远程服务时,UI 线程问题不太重要,因为 Activity 需要自行处理该问题。

我不明白你的第二段和最后一段有什么区别。在这两种情况下,您的服务都会调用回调对象,该对象将使用 runOnUiThread() 之类的内容来安排在 UI 线程上完成的工作。

据我所知,让服务执行任何类型的异步工作让客户端知道工作已完成的唯一两种方法是通过广播 Intent 或回调对象。广播 Intent 很方便,但是是公开的(即其他代码可以监视它们)。

我怀疑我在这里可能没有多大帮助,但我只是对您的情况了解不够,无法提供更多详细信息。

关于Android异步服务调用策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1493003/

相关文章:

android - 我在哪里可以从 Android 设备读取 WiFi 数据包丢失计数器?

从不正确的线程访问 Java android Realm

javascript - 如何实现 Typescript 异步等待模式 : Where is the Promise

javascript - 显示正在运行的已部署服务

java - 具有软键导航的 Android 手机资源

android - 将图像 URL 转换为 android 中的可绘制资源 ID

javascript - 如何等待所有异步任务在 Node.js 中完成?

javascript - 异步函数作为 setInterval Nodejs 的参数

android - 监视 Android 服务中的文件夹

android - file.delete() 不工作