服务、异步任务和线程之间的区别? ?

服务、异步任务和线程之间的区别是什么。如果我没有错,他们都是用来做一些背景的东西。那么,如何决定使用哪种方法以及何时使用呢?

89675 次浏览

也许你已经读过了关于他们的文件描述,我不会重复,相反我会尽量用我自己的话给出答案,希望他们能帮助你。

  • 服务就像一个活动,但是没有用户界面。例如,如果你想获取天气信息,你可能不会为它创建一个空白活动,为此你将使用一个服务。

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

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

我经常使用服务,异步任务。线程更少,或者根本不用,因为我可以用异步任务做几乎所有的事情。

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

  • 您可以在 Activity 和 Services 之间共享全局变量(例如线程)。
  • 只要活动或服务仍然存在,您的 申请及其所有全局变量就不会被清除。
  • 如果你的应用程序中有一个服务的实例,而操作系统需要资源,它首先会杀死你的活动,但是只要有服务,操作系统就不会连同它的全局变量一起杀死你的应用程序。

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

简而言之,服务代表 time consuming tasksAsyncTask代表 short-lived tasks线头代表线程。

从开发者的角度来看:

Thread : 用于执行与主线程并行的代码集。但是您不能处理线程内部的 UI。为此,您需要使用 HandlerHadler将线程 Runnable与使其成为 UI 线程的 Looper绑定在一起。

ASyncTask : 用于处理那些无法在主线程上运行的任务。例如,HTTP 请求是一项非常繁重的工作,不能在主线程上处理,所以在 ASyncTask中处理 HTTP 请求,它在后台与主线程异步并行工作。它有几个回调方法,它们对相应的事件进行调用。

Service : 在同一 Application进程的后台工作。当您必须执行一些没有任何与之关联的 UI 的处理时,就会实现它。

Service 类似于活动消耗大量时间的任务,但是 Async 任务允许我们执行长/后台操作,并在 UI 线程上显示其结果,而不必操作线程。

这是对你的问题最简单的回答

线头

是一个运行“并行”到 Main Thread 的执行单元是一个重点,除了主线程,你不能从这里的任何线程更新 UI 组件。

AsyncTask

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

服务

解决上面的问题,因为它独立于调用它的活动,所以即使活动被销毁,它也可以继续运行,即 它在主线程中运行(小心 ANR)使用后台服务(扩展 IntenService 它会自动为您创建工作线程)服务就像一个没有用户界面的活动, 适合长期工作