在这个问题:Android: AsyncTask vs Service,有人回答
服务是守护进程,AsynkTask是后台线程
有人回答了这个答案:
服务不是守护进程,因为它没有自己的执行线程。
问题:由于两者都使用线程并在后台工作,除了每个线程的生命周期之外, Asynctasks 和守护程序进程之间的主要区别是什么?
答案 0 :(得分:2)
根据: http://www.linux.org/threads/android-services-and-daemons.7143/
<强>服务强>
A&#34;服务&#34;是一个在背景中运行的特殊软件 GNU / Linux上的守护进程。服务没有GUI 。 A&#34;开始服务&#34; 在后台运行,直到它完成任务,崩溃或是 由用户或应用程序明确关闭。 A&#34;绑定服务&#34; 持续存在,直到没有更多应用程序附加或绑定到服务。
<强> AsyncTasks: 强>
AsyncTasks专为 无法执行的一次性耗时任务而设计 运行UI线程 。一个常见的例子是获取/处理数据 当按下按钮时。
<强>守护程序:强>
A&#34;守护进程&#34;是一个在后台运行的进程 *,没有拥有GUI 。 服务通常是守护进程,守护进程通常被视为服务。但是,服务和守护进程之间的确切差异是模糊的 。通常,它们可以被视为同一实体。但是, 有些人使用“守护程序”来引用一个软件和“服务”来引用守护程序提供的操作和API。
答案 1 :(得分:2)
我没有在服务或AsyncTask中遇到任何术语Daemon。对我来说守护进程的线程是来自java的,它允许JVM完成甚至未完成的线程。就Android而言,您无法控制您的应用程序进程 - 您最多可能会将其杀死。
Android服务是一个组件 - 它将它放在Activity组件附近。这是什么意思?它由系统管理 - 它具有生命周期方法被调用的生命周期。可以将服务配置为重新创建,或者您可以将其设置为前台(这样系统将不太可能将其杀死)。由于它是一个组件,您可以将其配置为在单独的进程下运行。它默认没有自己的执行线程 - 它在UI线程上运行。
现在AsyncTask是完全不同的东西,它不是一个组件,所以你不能从上面做任何事情。它有一件事是后台工作者线程。实际上,AsyncTask是一个包含Exeuctors线程池的包装器,它包含一些生命周期方法 - 比如onPreExecute,onPostExecute,......它不应该与服务进行比较,而应该与Loaders进行比较。