IntentService和服务之间有什么区别?
你能帮我理解一下IntentService
和Service
之间的IntentService
吗?
简而言之,Service是开发人员设置后台操作的更广泛的实现,而IntentService对于“火灾和遗忘”操作有用,负责后台线程的创build和清理。
从文档:
服务服务是一种应用程序组件,代表应用程序希望在不与用户交互的情况下执行长时间运行的操作,或者提供其他应用程序使用的function。
IntentService Service是IntentService Services的基类,用于按需处理asynchronous请求 (表示为Intents)。 客户通过startService(Intent)
调用发送请求; 该服务根据需要启动,使用工作线程处理每个Intent,并在工作不正常时自行停止。
参考这个文档 – http://developer.android.com/reference/android/app/IntentService.html
Service
是服务实现的基类。 Service
在应用程序的主线程中运行,这可能会降低应用程序的性能。 因此, IntentService
是Service的一个直接子类,可以让事情变得更简单。
IntentService
用于在后台执行某个任务。 一旦完成, IntentService
的实例将自动终止。 其使用的例子是从互联网上下载某个资源。
差异
-
Service
类使用应用程序的主线程,而IntentService
创build一个工作线程并使用该线程运行服务。 -
IntentService
创build一个队列,每次将一个意图传递给onHandleIntent()
。 因此,应该通过直接扩展Service
类来实现multithreading。Service
类需要使用stopSelf()
手动停止。 同时,IntentService
在完成执行时会自动停止。 -
IntentService
实现了返回null
onBind()
。 这意味着IntentService
不能被默认绑定。 -
IntentService
实现了将Intent发送到队列和onHandleIntent()
。
简而言之,使用IntentService
只有两件事情要做。 首先,执行构造函数。 其次,要实现onHandleIntent()
。 对于其他callback方法,需要调用super才能正确跟踪它。
服务:它在您系统的后台运行。 例如,
- 如果你去了一家旅馆,而且你把一份汤给你的服务器
- 服务器得到您的订单,并发送给厨师
- 你不知道如何在厨房做汤,做什么过程是必需的汤
- 一旦你的订单准备好了,服务器就会给你带来汤。
后台程序:厨师制作汤
IntentService: – 它是连续的服务。(即)当你一次给服务器订购很多食品时,服务器一个接一个地递送这些食品,而不是一次交付。
请参阅Tejas Lagvankar关于这个主题的文章 。 以下是Service和IntentService及其他组件之间的一些主要差异。
Service
实际上运行在您的应用程序的同一线程中; 当扩展Service时,必须手动产生新的线程来运行CPU阻塞操作。
VS
IntentService
是Service
一个子类,它产生一个线程从那里做后台工作(不需要创build一个新的线程来执行CPU阻塞操作)。
服务
- 没有UI的任务,但不应该用于长时间的任务。 使用服务线程内的长任务
- 由
onStartService()
调用 - 从任何线程触发
- 在主线上运行
- 可能会阻塞
main(UI
)线程
IntentService
- 长时间的任务通常不需要与主线程通信,如果需要通信则由Handler或广播完成
- 通过意向调用
- 由主线程触发( Intent在主线程上被接收,工作线程被产生 )
- 在单独的线程上运行
- 我们不能并行运行任务,并且多个意图在同一个工作线程上排队。
Service
:在主线程中工作,所以几秒钟后会导致ANR (Android Not Responding)。
IntentService
: Service
与另一个后台线程分开工作,做一些事情,而不与主线程交互。
差异
- 服务类使用应用程序的主线程,而IntentService创build一个工作线程并使用该线程运行服务。
- IntentService创build一个队列,每次将一个意图传递给onHandleIntent()。 因此,应该通过直接扩展Service类来实现multithreading。
- 服务类需要使用stopSelf()手动停止。 同时,IntentService在队列中没有意图时会自动停止。
- IntentService实现了返回null的onBind()。 这意味着IntentService不能被默认绑定。
- IntentService实现了将Intent发送到队列和onHandleIntent()的onStartCommand()。
服务
这是所有服务的基类。 扩展这个类时,重要的是创build一个新的线程来完成所有服务的工作,因为默认情况下,服务使用应用程序的主线程,这可能会降低应用程序运行的任何活动的性能。
IntentService
这是Service的一个子类,它使用一个工作线程来处理所有的启动请求,一次一个。 如果您不要求您的服务同时处理多个请求,这是最好的select。 所有你需要做的是实现onHandleIntent(),它接收每个启动请求的意图,所以你可以做后台工作。
差异
服务类使用应用程序的主线程,而IntentService创build一个工作线程并使用该线程运行服务。 IntentService创build一个队列,每次将一个意图传递给onHandleIntent()。 因此,应该通过直接扩展Service类来实现multithreading。 服务类需要使用stopSelf()手动停止。 同时,IntentService在队列中没有意图时会自动停止。 IntentService实现了返回null的onBind()。 这意味着IntentService不能被默认绑定。 IntentService实现了将Intent发送到队列和onHandleIntent()的onStartCommand()。
意向服务是Service的子项
IntentService:如果你想在打开你的应用程序的开始下载一堆图像。 这是一个一次性的过程,一旦下载完成,就可以自行清理。
服务:服务将不断用于您的应用程序和后端与Web API调用之间的通信。 即使它完成了它目前的任务,你仍然希望它在几分钟后,为更多的沟通
- 如何在Android 4.2中更改Action Bar的选项菜单的背景颜色?
- 如何居中alignmentAndroid中的ActionBar标题?
- onIabPurchaseFinished从未叫过。
- 滑动以closuresRecyclerView
- getDefaultSharedPreferences和getSharedPreferences之间的区别
- 如何为自定义小部件定义主题(样式)项目
- 是否有一种Android的Firebug或JavaScript控制台debugging?
- Android Volley中的http状态码,当error.networkResponse为null时
- 如何在屏幕中心显示吐司