Android Service 兩種啟動方式的區別

2021-07-04 03:37:16 字數 1505 閱讀 1372

最近在debug android service destory的bug,網上找了service相關的知識,startservice和bindservice都可以啟動service,知道這兩種方式的區別還是很有作用的。

android service 生命週期可以促使移動裝置的創新,讓使用者體驗到最優越的移動服務,只有broadcast receivers執行此方法的時候才是啟用的,當 onreceive()返回的時候,它就是非啟用狀態。

如果沒有程式停止它或者它自己停止,service將一直執行。在這種模式下,service開始於呼叫context.startservice() ,停止於context.stopservice(). service可以通過呼叫android service 生命週期() 或 service.stopselfresult()停止自己。不管呼叫多少次startservice() ,只需要呼叫一次 stopservice() 就可以停止service。

可以通過介面被外部程式呼叫。外部程式建立到service的連線,通過連線來操作service。建立連線調開始於context.bindservice(), 結束於context.unbindservice(). 多個客戶端可以繫結到同乙個service,如果service沒有啟動, bindservice() 可以選擇啟動它。

服務不能自己執行,需要通過呼叫context.startservice()或context.bindservice()方法啟動服務。這兩個方法都 可以啟動service,但是它們的使用場合有所不同。使用startservice()方法啟用服務,呼叫者與服務之間沒有關連,即使呼叫者退出了,服 務仍然執行。使用bindservice()方法啟用服務,呼叫者與服務繫結在了一起,呼叫者一旦退出,服務也就終止,大有「不求同時生,必須同時死」的 特點。

如果打算採用context.startservice()方法啟動服務,在服務未被建立時,系統會先呼叫服務的oncreate()方法,接著呼叫onstart()方法。如果呼叫startservice()方法前服務已經被建立,

多次呼叫startservice()方法並不會導致多次建立服務,

但會導致多次呼叫onstart()方法。採用startservice()方法啟動的服務,只能呼叫context.stopservice()方法結束服務,服務結束時會呼叫ondestroy()方法。

如果打算採用context.bindservice()方法啟動服務,在服務未被建立時,系統會先呼叫服務的 oncreate()方法,接著呼叫onbind()方法。這個時候呼叫者和服務繫結在一起,呼叫者退出了,系統就會先呼叫服務的onunbind()方 法,接著呼叫ondestroy()方法。如果呼叫bindservice()方法前服務已經被繫結,多次呼叫bindservice()方法並不會導致 多次建立服務及繫結(也就是說oncreate()和onbind()方法並不會被多次呼叫)。如果呼叫者希望與正在繫結的服務解除繫結,可以呼叫 unbindservice()方法,呼叫該方法也會導致系統呼叫服務的onunbind()-->ondestroy()方法。

Android Service兩種啟動啟動方式

startservice 正常呼叫 oncreate onstart 取消繫結 ondestroy 如果呼叫者自己直接退出而沒有呼叫stopservice,則service會一直在後台執行,直到下次呼叫者再啟動起來,並明確呼叫stopservice bindservice 正常呼叫 oncreate...

Android Service簡單總結

分兩種 local service 不少人又稱之為 本地服務 是指client service同處於乙個程序 remote service 又稱之為 遠端服務 一般是指service處於單獨的乙個程序中 remote service 常用的有兩種實現 messenger 信使 使用廣播通訊,serv...

Android Service相關知識

public void oncreate l.d wmodel.time,oncreate耗時 system.currenttimemillis s1 public static string getprocessname context cxt,int pid if procinfo.pid pi...