1.service 概述
- 服務是脫離UI的一種運行程序,它負責了一些不必顯示在屏幕上的運行過程。
- 服務分為:本地服務和遠程服務,此處只討論本地服務。
- 兩種啟動service的方式:startService和bindService。
2.Service生命周期
2.1 Service基本生命周期
- 提到生命周期,就要提到兩種開啟Service的方法了:
-
直接開啟startService,使用stopService關閉。
stratService和stopService一一對應,一個開啟,一個結束。
-
-
綁定開啟bindService,使用unbindService解綁關閉。
bindServic和unbindService一一對應,一個綁定開啟,一個解綁結束。
兩者區別是:
- start和stop只能開啟和關閉,無法操作service。bind和unbind可以操作service。
- start開啟的service,調用者退出后service仍然存在。bind開啟的service,調用者退出后,隨著調用者銷毀。
2.2 Service生命周期進階
生命周期過程中的方法一共有五種:
方法 | 含義 |
---|---|
onCreate() | 創建 |
onStartCommand() | 開始 |
onDestroy() | 銷毀 |
onBind() | 綁定 |
onUnbind() | 解綁 |
那什么時候調用這些方法呢?
注意以下條件:
1.在整個生命周期內,只有startCommand()能被多次調用。其他方法只能被調用一次。(即只能綁定和解綁一次。)
2.綁定后沒有解綁,無法使用stopService()將其停止。
3.如果已經onCreate(),那么startService()將只調用startCommand()。
4.如果是以bindService開啟,那么使用unbindService時就會自動調用onDestroy銷毀。
根據條件所有的判定圖如下:
startService()
stopService()
bindService()
unbindService()
2.3 例子練習
看表格里的順序寫調用的方法,推薦把右邊遮起來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.總結
總算把Service的生命周期弄清楚了。四個操作方法和五個內部方法如下:
方法 | 含義 |
---|---|
startService() | 開啟服務 |
stopService() | 關閉服務 |
bindService() | 綁定服務 |
unbindService() | 解綁服務 |
方法 | 含義 |
---|---|
onCreate() | 創建 |
onStartCommand() | 開始 |
onDestroy() | 銷毀 |
onBind() | 綁定 |
onUnbind() | 解綁 |