Service生命週期

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

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 生命週期 注意 onstart方法是在android2.0之前的平台使用的.在2.0及其之後,則需重寫onstartcommand方法,同時,舊的onstart方法則不會再被呼叫.1 可以通過呼叫 context.startservice 啟動乙個 service 這可能會觸發 se...

Service生命週期

1 通過startservice開啟服務 oncreate onstartcommand 2 通過stopservice關閉服務 ondestroy 說明 如果在未stopservice的情況下,再去startservice,只會onstartcommand 3 通過bindservice開啟服務 ...

Service生命週期

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