Asynctasks和守护进程之间的差异

时间:2016-01-17 21:40:27

标签: android service android-asynctask daemon

在这个问题:Android: AsyncTask vs Service,有人回答

  

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

有人回答了这个答案:

  

服务不是守护进程,因为它没有自己的执行线程。

问题:由于两者都使用线程并在后台工作,除了每个线程的生命周期之外, Asynctasks 守护程序进程之间的主要区别是什么?

2 个答案:

答案 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进行比较。