有人可以告诉我 TRUE 的区别吗?
答案 0 :(得分:24)
我的经验法则是AsyncTask
适用于我希望执行与单Activity
相关的操作而Service
适用于我想要执行某些操作的情况在启动它的Activity之后是在后台。
因此,如果我想在Activity
中进行一小部分后台处理而不占用UI,我将使用AsyncTask
。然后,我将使用Handler
中的默认Activity
来传递消息,以确保在主线程上进行更新。在主线程上处理更新有两个好处:UI更新正确发生,您不必担心同步问题。
例如,如果我想下载可能需要一段时间的下载,我会使用Service
。因此,如果我在我的应用程序或其他应用程序中转到另一个Activity
,我的Service
可以继续运行并继续下载文件,以便在我返回应用程序时准备就绪。在这种情况下,我可能会在下载完成后使用Status Bar Notification,因此用户可以选择在方便的时候返回我的应用程序。
如果您使用AsyncTask
进行长时间运行的过程,您可以在导航离开Activity
之后继续执行,但是:
Activity
位于后台,则在尝试使用结果等更新UI时可能会出现问题。Activity
时,背景Service
更容易被Android杀死。答案 1 :(得分:13)
当您需要在后台长时间运行某些内容时,请使用服务。它不受任何活动的约束。典型的例子是音乐播放器
当在当前活动中必须在后台完成某些操作时, AsyncTask 非常棒。例如。下载,搜索文件内的文本等。
我个人只使用处理程序来发布对UI线程的更改。例如。你在后台线程中做一些计算并通过处理程序发布结果。
底线:在大多数情况下,您需要 AsyncTask 。
答案 2 :(得分:5)
为了补充其他关于服务和AsyncTask之间区别的答案,值得注意的是[0]:
服务往往是描述应用程序重要部分的东西 - 而不是AsyncTask,它通常有助于活动和/或提高UI响应能力。除了提高代码清晰度之外,服务还可以与其他应用程序共享,从而在您的应用程序与外部世界之间提供清晰的界面。
而不是一本书,我会说开发者指南有很多好的答案。
[0]来源:http://developer.android.com/reference/android/app/Service.html#WhatIsAService
答案 3 :(得分:4)
例如:按下按钮上的内容点击,保留相同的活动&显示进度条/搜索栏以更新下载的百分比。如果活动进入后台,则可能存在冲突。
例如:当从Android电子市场下载的任何应用在状态栏中显示通知时用户界面返回上一页&让你做其他事情。
答案 4 :(得分:1)
服务是一种应用程序组件,可以在后台执行长时间运行的操作,但不提供用户界面。另一个应用程序组件可以启动服务,即使用户切换到另一个应用程序,它也将继续在后台运行。此外,组件可以绑定到服务以与之交互。
何时使用?
没有UI的任务,但不应该太长。在服务中使用线程来完成长任务。 一般的长期任务。
触发器:调用方法onStartService()
触发自:任意线程
运行:其托管流程的主要线程。该服务不会创建自己的线程,也不会在单独的进程中运行(除非您另行指定)
限制/缺点:可能会阻止主线程
AsyncTask可以正确,轻松地使用UI线程。此类允许在UI线程上执行后台操作和发布结果,而无需操纵线程和/或处理程序。异步任务由在后台线程上运行的计算定义,其结果发布在UI线程上。
何时使用?
必须与主线程通信的小任务 对于并行任务,使用多个实例或Executor 磁盘绑定任务可能需要几毫秒
触发器:调用方法execute()
触发自:主线程
运行:工作线程。但是,可以在两者之间调用主线程方法来发布进度。
限制/缺点:
参考Link