5

我想知道下载文件,异步任务或服务哪个更好?异步任务与服务下载数据

我的应用程序有八个按钮,其中一个启动一个direfferent下载(下载有〜10MB)。当用户点击一个或多个按钮来下载数据时最好使用异步任务或服务?

谢谢!

回答

5

无论如何,您应该使用AsyncTask,因为即使服务运行在主(GUI)线程中也不应该进行联网。是否在服务或活动中运行AsyncTask取决于您是否希望下载在后台继续。

+0

感谢@StenSoft,所以如果应用程序切换到后台或用户切换到另一个活动,异步任务停止? – Caaarlos 2015-02-09 01:55:58

+1

不,但没有服务,整个应用程序可以在任何时候被系统杀死。 – StenSoft 2015-02-09 01:57:01

+0

嗯知道我明白我必须在哪个时刻使用!所以我会使用AsyncTask。 你解决了我的疑惑,谢谢StenSoft! – Caaarlos 2015-02-09 02:05:16

1

的AsyncTask - AsyncTask操作线程和/或处理程序,如果你能做到这一点与Looper和东西更好何必呢? AsyncTask被设计成围绕线程和处理程序的助手类,它应该用于短操作(最多几秒钟)。..如何在生产模式下告诉您是否不会花费很长时间?可能是网络不好,网络速度慢,网络堵塞,手机重新启动 - 所有这些都可能会使你的下载破坏或未完成..我是应用程序的用户,当我浪费捆绑在任何东西上时,我都生气..

如果你问我,用

服务 - Service做成不管什么应用程序/屏幕是可见的运行,并使如果与UI沟通,只要它是可用的,如果不继续下载并保存, AsyncTask不构成通用线程框架。总是使用线程,它的酷,我们都喜欢它。

1

以上所有答案都有好处。但生命周期问题是您应该考虑的最重要的事情。例如可以说你使用asyncTask。因此用户开始下载并突然他/她旋转屏幕,并且因为您将asyncTask生命周期连接到activity,另一个asyncTask操作将被启动并导致10mb的强制下载。所以考虑到这个问题,你应该一起使用serviceasyncTask来维护生命周期问题和UI线程联网问题。

更新:意向性服务是一个更好的解决方案,因为它在自己的线程接收请求和下线时不会有什么