一个Service是在后台运行并执行一些费时的操作的业务组件,它对用户而言是不可见的。它总是在背后默默的支持整个系统的运作而提供相关的功能。一个被启动的Service在程序退出时,该Service有可能仍保持运行的状态。 Service允许各进程之间进行通信(IPC)。
使用Service的用户可以采用两种形式来安排Service完成相应的任务。
- 使用Context.startService方法启动一个Service.一个被启动的Service即使它的启动者被销毁后,该服务对象可能仍然在后台运行。采用该种方式使用服务组件适用于执行单任务且无需返回任何结果。一个被启动的Service必须在完成任务之后自行销毁(Context.stopService(..)),或者自行销毁(this.stopSelf()).
- 采用Context.bindService方法绑定一个Service.一个被绑定的Service通常提供给客户端一组相应的接口,如:发送消息,获取结果、以及在进程之间进行通信。多个组建能够同时绑定同一个Service组件,一个被绑定的Service一旦被所有其他应用程序组件取消绑定(Context.unbindService(..)),该Service的生命周期也随之结束。
Service组件能够同时提供给客户端这两种方式.一个启动的Service组件需要重写
onStartCommand方法来完成相应的功能,而一个被绑定的Service则需要重写
onBind方法。
Service在执行阶段并没有开辟一根新的线程,它仍然运行于主线程内,也就是说当一个Service需要连接网络或者做一些费时的操作时,就需要为它开辟一根新的线程来避免
ANP(应用程序未响应),才能让主线程能够与用户畅通的进行交互;