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