Service、异步任务和线程之间有什么区别?如果我没记错的话,它们都用于在后台执行一些任务。那么,如何决定在哪种情况下使用哪种方式呢?
Service、异步任务和线程之间有什么区别?如果我没记错的话,它们都用于在后台执行一些任务。那么,如何决定在哪种情况下使用哪种方式呢?
也许你已经读过有关它们的文档描述,我不会重复,相反我将用自己的话来回答,希望能帮到你。
Service类似于Activity但没有用户界面。如果你想要获取天气信息,你不必为此创建一个空白的Activity,而是可以使用Service。
Thread是线程,也许你已经从其他地方了解过了。你需要知道,你不能从一个Thread中更新UI。你需要使用Handler来完成这个任务,但请继续阅读。
AsyncTask是一种智能线程,建议使用。它很智能,因为它可以通过其方法帮助你完成任务,而且有三个方法在UI线程上运行,特别适合更新UI组件。
我经常使用Service和AsyncTask,较少或根本不使用Thread,因为几乎可以用AsyncTask完成所有任务。
这是你问题的最简单答案
线程
是一种在主线程“并行”运行的执行单元,这是一个重要的观点,除了主线程之外,在此任何线程都不能更新UI组件。
AsyncTask
是一个特殊的线程,它提供了更新UI的辅助方法,因此基本上你可以在后台线程上运行AsyncTask,同时更新UI。不需要显式处理进程间通信。
Service
解决了上述问题,因为它与调用它的活动分离,所以即使活动被销毁,它也可以继续运行。 它在主线程中运行(注意ANR),使用后台服务(扩展IntentService会自动为您创建工作线程)。 服务类似于没有UI的活动,适合长时间任务。
以下是我希望几天前有人告诉我的一些重要信息:
我的用例如下:我在全局空间中有一个连接到服务器的线程和一个显示结果的活动(Activity)。当用户按下主页键时,该活动(Activity)进入后台并启动一个新服务(Service)。然后,该服务从线程读取结果,并在需要时在通知区域显示信息。我不必担心操作系统销毁我的活动(Activity),因为我知道只要服务(Service)在运行,它就不会销毁线程。
简而言之,服务(Service) 用于处理 耗时任务
,异步任务(AsyncTask) 用于处理 短时间任务
,线程(Thread) 是 Java 的一个 标准工具类
,用于线程处理。
从开发者的角度来看:
线程:用于并行执行一组代码,但您不能在线程内处理UI。为此,您需要使用Handler
。 Hadler
将线程Runnable
与Looper
绑定,使其成为UI线程。
ASyncTask:用于处理那些无法在主线程上工作的任务。例如,HTTP请求是一个非常繁重的工作,无法在主线程上处理,因此您可以在ASyncTask
中处理HTTP请求。它在后台与主线程异步并行工作。它有一些回调方法,在相应的事件上被调用。
服务:在同一Application
进程下后台工作。当您必须进行某些处理而没有任何与之关联的UI时,实现此功能。
IntentService
,否则“服务”不一定会在后台运行。如果您从UiThread
启动了一个标准的“服务”,它将在UiThread
上运行。 - yshahakService
不会在不同的进程中运行,而是在应用程序进程中与其他组件一起运行。更好的说法是Service
将在其所在的线程的后台运行。 - yshahak服务就像是一个耗时的活动,但异步任务允许我们执行长时间/后台操作,并在UI线程上显示其结果,而无需操纵线程。