Android:AsyncTask vs服务

为什么我在这里读到大部分有关AsyncTask和Loaders的问题的答案,但没有提供有关服务的内容 ? 服务是不是很好知道,或者是否被弃用或有一些不好的属性或东西? 有什么区别?

(顺便说一句,我知道还有其他的线索,但是没有一个真正的差异可以帮助开发人员轻松地决定他是否更好地使用这个或那个来解决实际问题。)

在某些情况下,可以用AsyncTask或者一个Service来完成同样的任务,但是通常一个比另一个更适合于一个任务。

AsyncTask被devise为一次性的耗时的任务,不能运行的UI线程。 一个常见的例子是当按下button时获取/处理数据。

Service被devise为在后台持续运行。 在上面的例子中,当一个button被按下时,你可以启动一个服务,让它获取数据,然后停止它,但是效率不高。 使用一次只运行一次的AsyncTask ,返回数据并完成的速度要快得多。

如果你需要不断地在后台做某件事,那么Service是你最好的select。 这方面的例子包括播放音乐,不断检查新数据等。

另外,正如Sherif所说,服务不一定会从UI线程中stream失。

在大多数情况下,即使您的应用程序的“ Activity未打开时,“ Service也适用于您要运行代码的情况。 AsyncTask被devise成使UI线程的执行代码非常简单。

服务是完全不同的:服务不是线程

你的活动绑定到一个服务,该服务包含一些函数,当被调用时,阻塞调用线程。 您的服务可能被用来将温度从摄氏温度改变到度数。 任何绑定的活动都可以得到这个服务。


不过, AsyncTask是一个在后台执行一些工作的线程,同时还能够将结果报告给调用线程。

只是一个想法:一个服务可能有一个AsyncTask对象!

服务是一个守护进程,AsynkTask是后台线程

Service是Android框架的组件之一,它不需要用户界面来执行,这意味着即使应用程序没有被用户主动使用,也可以用服务执行一些操作。 这并不意味着服务将运行在一个单独的线程中,而是在主线程中运行,并且在需要时可以在单独的线程中执行操作。 例如,用户可以在后台播放音乐,在没有用户交互的情况下与服务器同步数据等

另一方面, AsyncTask用于在单独的线程上执行UI阻塞任务。 当创build和维护线程以及将结果返回给主线程的所有任务都由AsyncTask来处理时,就像创build一个新线程并执行任务一样。用法是从服务器获取数据,对内容parsing器执行CRUD操作等。

服务asynctask差不多是做同样的事情,使用服务或asynctask取决于你的要求是什么。

作为一个例子,如果你想要加载数据到一个服务器后点击一些button或更改屏幕,你最好去一个asynctask.it与主UI线程(在后台运行)平行运行.for运行asynctack活动或您的应用程序应在主UI线程。从应用程序退出后没有asynctask。

但服务不是这样的,一旦你开始一个服务,它可以在你退出应用程序后运行,除非你停止服务。就像我说的这取决于你的要求。如果你想保持检查数据接收或检查networking状态不断你最好去服务。

快乐的编码。