Service 兩種啟動方式

2021-09-30 12:08:22 字數 1782 閱讀 6746

service的生命週期service的生命週期方法比activity少一些,只有oncreate,onstart,ondestroy

我們有兩種方式啟動乙個service,他們對service生命週期的影響是不一樣的。

1通過startservice

service會經歷oncreate->onstart

stopservice的時候直接ondestroy

如果是呼叫者(testserviceholder)自己直接退出而沒有呼叫stopservice的

話,service會一直在後台執行。

下次testserviceholder再起來可以stopservice。

2通過bindservice

service只會執行oncreate,這個時候testserviceholder和testservice繫結在一起

testserviceholder退出了,srevice就會呼叫onunbind->ondestroyed

所謂繫結在一起就共存亡了。

那有同學問了,要是這幾個方法交織在一起的話,會出現什麼情況呢?

乙個原則是service的oncreate的方法只會被呼叫一次,就是你無論多少次的startservice又bindservice,service只被建立一次。如果先是bind了,那麼start的時候就直接執行service的onstart方法,如果先是start,那麼bind的時候就直接執行onbind方法。如果你先bind上了,就stop不掉了,對啊,就是stopservice不好使了,只能先unbindservice,再stopservice,所以是先start還是先bind行為是有區別的。

android中的服務和windows中的服務是類似的東西,服務一般沒有使用者操作介面,它執行於系統中不容易被使用者發覺,可以使用它開發如監控之類的程式。服務的開發比較簡單,如下:

第一步:繼承service類

publicclasssmsserviceextendsservice{}

服務不能自己執行,需要通過呼叫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()方法.

Service 兩種啟動方式

service的生命週期service的生命週期方法比activity少一些,只有oncreate,onstart,ondestroy 我們有兩種方式啟動乙個service,他們對service生命週期的影響是不一樣的。1通過startservice service會經歷oncreate onsta...

Activity 啟動Service兩種方式與區別

activity 啟動service兩種方式 startservice bindservice startservice intent 1.定義乙個類繼承service 2.在manifest.xml檔案中配置該service 3.使用context的startservice intent 方法啟動...

啟動遠端service的兩種方式 顯示和隱式

1 顯式啟動 service端 android exported true 客戶端 public static final string name gesture detector remote service com.easyliu.watchgesture.service.gesturedete...