1.service 概述
- 服務是脫離UI的一種運行程序,它負責了一些不必顯示在屏幕上的運行過程。
- 服務分為:本地服務和遠程服務,此處只討論本地服務。
- 兩種啟動service的方式:startService和bindService。
2.Service生命周期
2.1 Service基本生命周期
- 提到生命周期,就要提到兩種開啟Service的方法了:
-
直接開啟startService,使用stopService關閉。
stratService和stopService一一對應,一個開啟,一個結(jié)束。
-
-
綁定開啟bindService,使用unbindService解綁關閉。
bindServic和unbindService一一對應,一個綁定開啟,一個解綁結(jié)束。
兩者區(qū)別是:
- start和stop只能開啟和關閉,無法操作service。bind和unbind可以操作service。
- start開啟的service,調(diào)用者退出后service仍然存在。bind開啟的service,調(diào)用者退出后,隨著調(diào)用者銷毀。
2.2 Service生命周期進階
生命周期過程中的方法一共有五種:
| 方法 | 含義 |
|---|---|
| onCreate() | 創(chuàng)建 |
| onStartCommand() | 開始 |
| onDestroy() | 銷毀 |
| onBind() | 綁定 |
| onUnbind() | 解綁 |
那什么時候調(diào)用這些方法呢?
注意以下條件:
1.在整個生命周期內(nèi),只有startCommand()能被多次調(diào)用。其他方法只能被調(diào)用一次。(即只能綁定和解綁一次。)
2.綁定后沒有解綁,無法使用stopService()將其停止。
3.如果已經(jīng)onCreate(),那么startService()將只調(diào)用startCommand()。
4.如果是以bindService開啟,那么使用unbindService時就會自動調(diào)用onDestroy銷毀。
根據(jù)條件所有的判定圖如下:

startService()

stopService()

bindService()

unbindService()
2.3 例子練習
看表格里的順序?qū)懻{(diào)用的方法,推薦把右邊遮起來0.0:
start=startService
stop=stopService
bind=bindService
unbind=unbindService
| 順序 | 答案 |
|---|---|
| start->stop | A-B-C |
| bind->unbind | A-D-E-C |
| start->start | A-B-B |
| start->bind->stop | A-B-D |
| start->bind->unbind | A-B-D-E |
| bind->start->unbind | A-D-B-E |
A:onCreate()
B:onStartCommand()
C:onDestroy()
D:onBind()
E:onUnbind()
3.總結(jié)
總算把Service的生命周期弄清楚了。四個操作方法和五個內(nèi)部方法如下:
| 方法 | 含義 |
|---|---|
| startService() | 開啟服務 |
| stopService() | 關閉服務 |
| bindService() | 綁定服務 |
| unbindService() | 解綁服務 |
| 方法 | 含義 |
|---|---|
| onCreate() | 創(chuàng)建 |
| onStartCommand() | 開始 |
| onDestroy() | 銷毀 |
| onBind() | 綁定 |
| onUnbind() | 解綁 |

