Service生命週期

2022-08-05 14:12:09 字數 1033 閱讀 7279

service有兩種啟動方式:

l  context.startservice(),當它第一次被呼叫時,service被建立執行oncreate()方法,隨後即呼叫onstartcommand()方法。如果是以這種方式啟動,那麼它會一直執行,不論是否有呼叫者繫結,直到context.stopservice()被呼叫,或者stopself()被呼叫,service結束。

l  context.bindservice(),當被繫結的service沒有執行時,會呼叫oncreate()方法,但是不會呼叫onstartcommand()方法。此時,service的onbind()方法會返回ibinder物件,以便呼叫者呼叫service。如果是以方式2啟動,service將“計數執行”,即要求至少有一個呼叫者繫結到service上,如果全部unbindservice(),則service結束。

幾個需要注意的地方

1) service 無論以何種方式建立,都是在應用的主執行緒裡建立的,也就是說建立一個 service 並不意味著生成了一個新的執行緒, service 的建立過程是阻塞式的,因此也需要考慮效能,不能影響介面和邏輯上的後續操作。

2)如果 service 自己沒有生成新的執行緒,那它也是執行在應用的主執行緒裡的,因此 service 本身並不能提高應用的響應速度和其他的效能,而是說通過這個後臺服務生成新的執行緒來處理比較耗時的操作如大資料的讀取等來提高響應, service 自己並不能保證這一點。 service 相當於提供了一個這些費時操作的平臺,由它在後臺建立新執行緒完成這些任務,以及視各種情況管理這些執行緒,包括銷燬。

3) stopservice 和 unbindservice 都可以把 service 停掉,但是如果希望明確立刻停掉 service ,則使用 stopservice 更安全,因為 unbindservice 實質上是將與 service 的連線數減1,當減為 0 的時候才會銷燬該服務例項, stopservice 的效果相當於將連線數立即減為 0 ,從而關閉該服務,所以在選擇關閉方式上要視不同情況而定。

Service生命週期

service生命週期 使用context startservice 啟動service 其生命週期為context startservice oncreate onstart service running context stopservice ondestroy service stop 如果...