Service,Async Task&线?

时间:2010-07-16 11:35:42

标签: android android-asynctask android-service java-threads

Service,Async Task&线。如果我没有错,他们都习惯在后台做一些事情。那么,如何决定使用哪个以及何时使用?

6 个答案:

答案 0 :(得分:180)

可能你已经阅读了关于它们的文档描述,我不会重复它们,相反我会尝试用自己的话来回答,希望它们会帮助你。

  • 服务就像一个活动但没有界面。例如,如果您想要获取天气,则不会为此创建空白活动,为此您将使用服务。

  • 线程是一个线程,可能你已经从其他部分知道了。您需要知道无法从线程更新UI。您需要使用处理程序,但请进一步阅读。

  • AsyncTask是一个建议使用的智能线程。智能因为它可以帮助它的方法,并且有三种方法在UI线程上运行,这很好地更新UI组件。

我经常使用Services,AsyncTasks。线程较少,或者根本没线,因为我几乎可以使用AsyncTask完成所有操作。

答案 1 :(得分:22)

这是您问题的最简单答案

螺纹

是运行" parallel"到主线程是一个重点,除了主线程之外,你不能从这里的任何线程更新UI组件。

<强>的AsyncTask

是一个特殊的线程,它为您提供更新UI的辅助方法,所以基本上您可以更新UI甚至AsyncTask将在后台线程上运行。不需要明确地进行进程间通信处理。

服务

 解决上面的问题,因为它与调用它的活动分开存在,所以它甚至可以在活动被销毁时继续运行,它在主线程中运行(谨防ANR)使用后台服务(扩展IntentService它创建了工人线程自动为您服务)服务就像没有用户界面的活动, 适合长期任务

答案 2 :(得分:15)

我希望有人在几天前告诉我的更多信息:

  • 您可以在“活动和服务”之间共享全局变量(如线程)。
  • 只要有活动或服务仍然存在,您的应用程序及其所有全局变量都不会被删除。
  • 如果您的应用中有一个服务实例且操作系统需要资源,它首先会终止您的活动,但只要有服务,操作系统就不会将您的应用程序与其全局变量一起消灭。

我的用例是这样的:我在全局空间中有一个连接到服务器的线程和一个显示结果的Activity。当用户按下主页按钮时,活动将转到后台并启动新服务。然后,此服务从线程读取结果,并在需要时在通知区域中显示信息。我不担心操作系统会破坏我的Activity,因为我知道只要服务正在运行它就会破坏线程。

答案 3 :(得分:9)

简而言之,time consuming tasks服务short-lived tasks AsyncTask 主题是{{1}对于线程。

答案 4 :(得分:3)

从开发人员的角度来看:

线程:用于执行与主线程并行的代码集。但是你无法处理线程内的UI。为此,您需要使用Handler。 Hadler像线程一样工作,但也可以处理UI。

ASyncTask :用于处理无法在主线程上工作的任务。例如,HTTP请求是非常繁重的工作,无法在主线程上进行处理,因此您在ASyncTask中处理HTTP请求它与您的主线程在后台异步工作。它有很少的回调方法被调用于相应的事件。

服务:是后台进程。当你必须进行一些没有任何与之关联的UI的处理时,就会使用它。

答案 5 :(得分:2)

服务就像活动耗时很长的任务,但Async任务允许我们执行长/后台操作并在UI线程上显示其结果,而不必操纵线程。