在服务中使用 AsyncTask

Posted

技术标签:

【中文标题】在服务中使用 AsyncTask【英文标题】:Using AsyncTask in Service 【发布时间】:2016-11-22 22:19:06 【问题描述】:

这是在服务(不是 IntentService)中使用 AsyncTask 的正常做法。还是以其他方式创建后台线程更好?

【问题讨论】:

【参考方案1】:

这是在 Service 中使用 AsyncTask 的正常做法吗

没有。 AsyncTask的重点是在后台工作完成后,可以在主应用线程上做一些工作。服务很少(如果有的话)需要在主应用程序线程上工作。

或者以其他方式创建后台线程更好?

是的:new Thread() 将是直接替代AsyncTask 的有力候选人。在其他情况下,某种形式的线程池可能有意义。

【讨论】:

不知道为什么有人投了反对票。他直接而准确地回答了这些问题。 AsyncTask,虽然可以工作,但它不是最佳实践。使用你自己的线程来做后台工作。如果需要执行大量串行任务,甚至可能是您自己的 HandlerThread + Handler 实现来干净地处理工作。.. 这是一个准确的答案。不值得投反对票。 另外一点要补充的是,使用服务的目的是为了长时间运行的操作(假设我们在后台流式传输音乐,我们正在下载大数据,我们正在上传大数据)所以这时候你会避免使用 AsyncTask。使用 AsyncTask 是为了短期操作,没有重量和冗长的操作。【参考方案2】:

不,AsyncTask 旨在在远离 UI 线程的后台线程中运行一些短期工作。它有回调,允许它在完成后修改 UI 线程。

如果您需要在服务中使用单独的线程,请使用 new Thread() 创建一个线程

【讨论】:

以上是关于在服务中使用 AsyncTask的主要内容,如果未能解决你的问题,请参考以下文章

AsyncTask源码解析

如何在服务器中使用Array并在服务中显示

使用移动设备访问托管在 Windows 服务中的 WCF 服务

如何在android中使用WCF服务?

DELPHI编写服务程序总结(在系统服务和桌面程序之间共享内存,在服务中使用COM组件)

使用 Web 服务在 mysql 服务器中存储列表视图