Android 服务、异步任务和;线

Android 服务、异步任务和;线,android,android-asynctask,android-service,java-threads,Android,Android Asynctask,Android Service,Java Threads,服务、异步任务和线程之间的区别是什么。如果我没弄错的话,所有这些都是用来在后台做一些事情的。那么,如何决定使用哪一个以及何时使用?可能您已经阅读了关于它们的文档描述,我不会重复它们,而是尝试用我自己的话给出答案,希望它们能帮助您 服务类似于活动,但没有用户界面。例如,如果您想获取天气,您可能不会为其创建空白活动,因此您将使用服务 一根线就是一根线,也许你已经从另一部分知道了。您需要知道不能从线程更新UI。您需要为此使用处理程序,但请进一步阅读 AsyncTask是建议使用的智能线程。智能,因为

服务、异步任务和线程之间的区别是什么。如果我没弄错的话,所有这些都是用来在后台做一些事情的。那么,如何决定使用哪一个以及何时使用?

可能您已经阅读了关于它们的文档描述,我不会重复它们,而是尝试用我自己的话给出答案,希望它们能帮助您

  • 服务类似于活动,但没有用户界面。例如,如果您想获取天气,您可能不会为其创建空白活动,因此您将使用服务

  • 一根线就是一根线,也许你已经从另一部分知道了。您需要知道不能从线程更新UI。您需要为此使用处理程序,但请进一步阅读

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


我经常使用服务、异步任务。没有线程,或者根本没有线程,因为我几乎可以用AsyncTask做任何事情。

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

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

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

简而言之,服务用于耗时任务,异步任务用于
短期任务
线程是线程的标准java结构。

从开发人员的角度来看:

线程:用于与主线程并行执行set to代码。但是您不能在线程内部处理UI。为此,您需要使用
处理程序
。Hadler的工作方式类似于线程,但也可以处理UI

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


服务:是一个后台进程。当您必须执行一些没有任何UI关联的处理时,可以使用它。

服务类似于耗时较长的活动任务,但异步任务允许我们执行长时间/后台操作,并在UI线程上显示其结果,而无需操作线程。

这是您问题的最简单答案 线程 是与主线程“并行”运行的执行单元重要的一点是,除了主线程之外,您不能从任何线程更新UI组件。 异步任务 是一个特殊的线程,它为您提供了更新UI的助手方法,因此基本上您可以更新UI,即使AsyncTask将在后台线程上运行。不需要显式执行进程间通信处理。 服务 解决上述问题是因为它独立于调用它的活动,因此即使活动被销毁,它也可以继续运行,它在主线程中运行(注意ANR)使用后台服务(扩展IntentService,它会自动为您创建工作线程)服务就像没有UI的活动
适合长时间工作

谢谢您的解释。因此,如果我需要制作一个从web获取数据的应用程序,那么哪一个是更好的选择服务还是异步任务?您需要同时使用这两个选项。您创建了一个服务并在其中使用了AsyncTask。除了上面的答案之外,AsyncTask还要经过4个步骤:onPreExecute()、onProgressUpdate(Progress…)onPostExecute(Result)、{在UI线程中运行}、doInBackground(Params…{在后台线程中运行}。由于它在UI线程中提供了3种方法,用户不必担心使用处理程序或回调来更新UI。@Pentium10:您通常可以使用IntentService,而不是Service+AsyncTask。另外值得注意的是,默认情况下,Android服务在主(UI)线程上运行。如果您的服务需要在后台工作,则需要在单独的线程(或异步任务)中显式启动。否则,它可能会中断UI响应并引发应用程序不响应错误。Android上的服务本质上是一种“隐形”和“微型”活动,不一定是“后台”工作者。
服务
不需要在后台运行,除非您使用
IntentService
。如果您从UiThread启动了一个标准
服务
,它将在UiThread上运行。@YSHAHAHAK您是对的,但这里不需要深入定义。用户只想知道它们之间的区别。是的,但这并不准确,因为默认情况下,
服务
不会在不同的进程中运行,而是在应用程序进程中与其他组件一起运行。最好说,
服务
将在Threa的后台运行