第 2 周 清晰地理解 Service

2021-09-11 14:49:14 字數 1669 閱讀 3382

生命週期:

oncreate  -> onstartcommand -> onstart(已棄用) -> ondestory

複製**

可以多次 startservice():

oncreate  -> onstartcommand -> onstartcommand .... -> ondestory

複製**

第二次啟動的時候就會重複呼叫 onstartcommand。

public

@startresult

intonstartcommand

(intent intent, @startargflags int flags, int startid)

複製**

onstartcommand 返回值可選值:

start_sticky = 1

當 service 在開始狀態時(呼叫 onstartcommand 返回乙個值後),如果 service 所在的程序被殺,保持 service 在開始狀態,不保留傳過來的 intent。然後系統將嘗試重新建立 service。因為是在開始狀態,建立新的例項後一定會呼叫用 onstartcommand。如果沒有待處理的啟動命令,intent 物件為 null,需要注意檢查這一點。

start_sticky_compatibility = 0

start_sticky 的相容版本,但是不能保證被殺後 onstartcommand 會被呼叫。

start_not_sticky = 2

service 所在程序被殺後,不會重新啟動。

start_redeliver_intent = 3

service 所在程序被殺後,intent 會重新傳遞給 onstartcommand。如果呼叫 stopself(id) 則停止傳遞。

是乙個 client/server 架構,service 作為服務端,可以有多個客戶端繫結。 它允許元件(如activity)繫結到服務,傳送請求,接收響應,也可以執行程序間通訊(ipc)。所有繫結的元件都解除繫結後,該服務會被銷毀。元件被銷毀後,服務也會被銷毀。

5.0 之後官方推薦使用 jobscheduler 執行後台服務

生命週期:

oncreate

onbind

onserviceconnected

onunbind

ondestroy

複製**

完整生命週期:

// 表示 service 存在且允許客戶端訪問

boolean bind = bindservice()

複製**

bindservice 的三個引數:

當第三個引數沒有設定 bind_auto_create 時,只呼叫 bindservice 不會自動建立服務,先呼叫 bindservice,之後再呼叫 startservice,會自動建立繫結服務。

清晰理解Service

生命週期 先呼叫unbindservice stopservice start sticky compatibility 0 相容start sticky,不確保服務一定會被重啟在被殺死之後 start sticky 1 如果service的程序被殺掉,當返回這個值時,把它放在初始狀態,不保留它的傳...

第13周作業2

實驗目的 學會使用自定義函式解決實際問題 實驗內容 定義自定義函式,計算sin和cos的近似值 作 者 李超 完成日期 2011 年 11 月 18 日 版 本 號 01.13.2 對任務及求解方法的描述部分 輸入描述 無 問題描述 自定義函式,用泰勒公式實現計算sin和cos的近似值,要求 1 求...

第2週第2次課 線性表(2)

順序表基本運算演算法 1.初始化線性表initlist l 2.銷毀線性表destroylist l 3.判斷線性表是否為空表listempty l 4.求線性表的長度listlength l 5.輸出線性表displist l 6.求線性表中的某個資料元素值getelem l,i,e 7.按元素值...