在服务中使用 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的主要内容,如果未能解决你的问题,请参考以下文章
使用移动设备访问托管在 Windows 服务中的 WCF 服务