Service,Async Task&Thread之间有什么区别。如果我没有错,他们都习惯在后台做一些事情。那么,如何决定使用哪个以及何时使用?
可能你已经阅读了关于它们的文档描述,我不会重复它们,而是我会尝试用自己的话来回答,希望它们会帮助你。
我经常使用Services,AsyncTasks。线程较少,或根本没有,因为我可以用AsyncTask做几乎所有事情。
这是您问题的最简单答案
线
是与主线程“并行”运行的执行单元是一个重要的点,除了主线程之外,您无法从此处的任何线程更新UI组件。
的AsyncTask
是一个特殊的线程,它为您提供更新UI的帮助方法,所以基本上您可以更新UI甚至AsyncTask将在后台线程上运行。不需要明确地进行进程间通信处理。
服务
解决上面的问题,因为它与调用它的活动分开存在,所以它甚至可以在活动被销毁时继续运行,它在主线程中运行(小心ANR)使用后台服务(扩展IntentService它会自动创建工作线程)为了你)。服务就像没有UI的活动,有利于长期任务
我希望有人在几天前告诉我的更多信息:
我的用例是这样的:我在全局空间中有一个连接到服务器的线程和一个显示结果的Activity。当用户按下主页按钮时,活动将转到后台并启动新服务。然后,此服务从线程读取结果,并在需要时在通知区域中显示信息。我不担心操作系统会破坏我的Activity,因为我知道只要服务正在运行它就会破坏线程。
简而言之,服务为time consuming tasks
,AsyncTask为short-lived tasks
,Thread是线程的standard java construction
。
从开发人员的角度来看:
线程:用于执行与主线程并行的代码集。但是你无法处理线程内的UI。为此你需要使用Handler
。 Hadler像线程一样工作,但也可以处理UI。
ASyncTask:用于处理无法在主线程上工作的那些任务。例如,HTTP请求是非常繁重的工作,无法在主线程上进行处理,因此您在ASyncTask
中处理HTTP请求它与您的主线程在后台异步工作。它有很少的回调方法在它们上面调用相应的事件。
服务:是后台流程。当您必须执行一些没有任何与之关联的UI的处理时,它会被使用。
服务就像活动耗时很长的任务,但Async任务允许我们执行长/后台操作并在UI线程上显示其结果,而不必操纵线程。