Service
按官方原文档所说:Service是一个没有界面在后台执行耗时操作的应用组件。其他组件能够启动Service,并且当用户切换到相应的应用场景,Service一样能在后台持续运行。另外一个组件还能绑定到Service与之交互(IPC通信),所有这些活动都是在后台进行的,Service有两种状态“启动的”和“绑定的”。
Service的生命周期
Service的生命周期有2种:
调用StartService():onCreate->onstart->onStartCommand->onDestroy
调用BindService():onCreate->onBind->onUnBind->onDestroy
通过startService启动服务处于“启动的”状态,这个时候不管启动它的组件是否销毁,Service会一直在后台运行。通常started状态的Service执行单任务,并且不回任何结果给启动者,比如当下载或上传一个文件时,当任务完成Service就应该停止。
通过Bind启动的服务处于“绑定的”状态,这种方式一般结合AIDL使用(IPC通信机制)。
AIDL的实现步骤:
特别要注意:如果启动一个服务并且绑定服务,那么在结束服务时必须先解绑再停止服务,直接停止服务Service并不会Destroy掉.
Service与Activity一样都存在当前进程的主线程中,所以不能直接在Service里面进行耗时操作,必须新开子线程。只是说在Serivce里面的线程比在Activity中创建的线程更好管理。
IntentService
IntentService使用队列的方式来处理多个Intent请求,对于异步的Intent请求intentService会开启一个wordThread线程在处理,并且采用队列的模式处理完第一个再处理第二个。(onHandleIntent)
这里就给我们提供了一个思路,与其在Service开启新线程进行耗时操作,还不如直接使用IntentService来处理耗时操作。