Android四大组件之Service

后勤保障部队。

简介

Service 是可以在后台执行长时间运行操作而不提供用户界面的应用组件。服务可由其他应用组件启动,而且即使用户切换到了其他应用,服务仍将在后台继续运行。此外,组件可以绑定到服务,以与之进行交互,甚至执行进程间通信(IPC)。

使用方法

startService

启动:当应用组件(如 Activity)通过调用 startService() 启动服务时,服务即处于“启动”状态。一旦启动,服务即可在后台无限期运行,即使启动服务的组件已被销毁也不受影响。 已启动的服务通常是执行单一操作,而且不会将结果返回给调用方。例如,它可能通过网络下载或上传文件。 操作完成后,服务会自行停止运行。

调用方法为:

1
2
startService() //启动Service
stopService() //结束Service

startService 主要用于启动服务,后续 Activity 和 Service 不需要通信

bindService

绑定:当应用组件通过调用 bindService() 绑定到服务时,服务即处于“绑定”状态。绑定服务提供了一个客户端-服务器接口,允许组件与服务进行交互、发送请求、获取结果,甚至是利用进程间通信 (IPC) 跨进程执行这些操作。 仅当与另一个应用组件绑定时,绑定服务才会运行。 多个组件可以同时绑定到该服务,但全部取消绑定后,该服务即会被销毁。

调用方法为:

1
2
bindService(intent, serviceConnection, flag) //绑定service
unbindService(serviceConnection)

当 Activity 需要与 Service 通信时,需要使用bindService(),在 onBind() 方法里返回 binder 。

生命周期

两者的生命周期大致如图所示(事实上要更加复杂):

可以看出,由于 bindService 的通信功能,它的生命周期状态相应的也要多一些。

方法 功能
onCreate() 当 Service 第一次被创建后立即回调该方法,该方法在整个生命周期中只会调用一次
onStartCommand() 当客户端调用 startService(intent) 方法时会回调。多次调用 startSetvice() 方法时,不会创建新的Service对象,而是会复用已产生的对象,但会继续回调onStartCommand() 方法。
IBinder onBind() 该方法是 Service 都必须实现的方法,该方法会返回一个 IBinder 对象,app 通过该对象与 Service 组件进行通信。
onUnbind() 当该 Service 上绑定的所有客户端都断开时会回调该方法。
onDestory() 当 Service 被关闭时会回调该方法,该方法只会回调一次。
感谢您的支持
-------------本文结束感谢您的阅读-------------