安卓開發 service 簡介

2022-05-09 08:06:08 字數 2667 閱讀 6016

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

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

1 通過startservice

service會經歷  startservice –> oncreate() –> onstartcommandcommand

()。停止時,stopservice –> ondestroy()。如果呼叫者直接退出而沒有停止service,則service 會一直在後台執行 context.startservice()方法啟動服務,在服務未被建立時,系統會先呼叫服務的oncreate()方法,接著呼叫onstartcommandcommand

()方法。如果呼叫startservice()方法前服務已經被建立,多次呼叫startservice()方法並不會導致多次建立服務,但會導致多次呼叫onstartcommandcommand

()方法。採用startservice()方法啟動的服務,只能呼叫context.stopservice()方法結束服務,服務結束時會呼叫ondestroy()方法附**。或者service自己呼叫

stopself

()或者stopselfresult

(int startid)來關閉自己。

2 通過bindservice

context.bindservice()方式的生命週期: 繫結時,bindservice -> oncreate() –> onbind()呼叫者退出了,即解繫結時,srevice就會unbindservice –>onunbind() –> ondestory()   。context.bindservice()方式啟動 service的方法:繫結service需要三個引數:bindservice(intent, conn, service.bind_auto_create);第乙個:intent物件。第二個:serviceconnection物件,建立該物件要實現它的onserviceconnected()和 onservicedisconnected()來判斷連線成功或者是斷開連線 。第三個:如何建立service,一般指定繫結的時候自動建立附**

如果我們想保持和 service 的通訊,又不想讓 service 隨著 activity 退出而退出呢?你可以先 startservice() 然後再 bindservice() 。當你不需要繫結的時候就執行 unbindservice() 方法,執行這個方法只會觸發 service 的 onunbind() 而不會把這個 service 銷毀。這樣就可以既保持和 service 的通訊,也不會隨著 activity 銷毀而銷毀了。

注意:bindservice和startservice就一次混用的時候,想要ondestory這個service,不需要考慮unbind和stop的順序。

service的oncreate的方法只會被呼叫一次,

就是你無論多少次的startservice又 bindservice,service只被建立一次。

如果先是bind了,那麼start的時候就直接執行service的onstartcommand方法,

如果先是start,那麼bind的時候就直接執行onbind方法。如果你先bind上了,就stop不掉了,

只能先unbindservice, 再stopservice,所以是先start還是先bind行為是有區別的。

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

服務不能自己執行,需要通過呼叫context.startservice()或context.bindservice()方法啟動服務。

這兩個方法都可以啟動service,但是它們的使用場合有所不同。使用startservice()方法啟用服務,呼叫者與服務之間沒有關連,

即使呼叫者退出了,服務仍然執行。使用bindservice()方法啟用服務,呼叫者與服務繫結在了一起,呼叫者一旦退出,服務也就終止,大有「不求同時生,必須同時死」的特點。

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

接著呼叫onstartcommand()方法。如果呼叫startservice()方法前服務已經被建立,多次呼叫startservice()方法並不會導致多次建立服務,

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

如果打算採用context.bindservice()方法啟動服務,在服務未被建立時,系統會先呼叫服務的oncreate()方法,

接著呼叫onbind()方法。這個時候呼叫者和服務繫結在一起,呼叫者退出了,系統就會先呼叫服務的onunbind()方法,

接著呼叫ondestroy()方法。如果呼叫bindservice()方法前服務已經被繫結,

多次呼叫bindservice()方法並不會導致多次建立服務及繫結(也就是說oncreate()和onbind()方法並不會被多次呼叫)。

如果呼叫者希望與正在繫結的服務解除繫結,可以呼叫unbindservice()方法,呼叫該方法也會導致系統呼叫服務的onunbind()-->ondestroy()方法.

安卓之service簡單介紹

一 什麼是service 二 如何使用service 三service的生命週期 一 什麼是service 二 如何使用service package jason.tutorial import android.content.intent import android.os.binder impo...

安卓跨程序繫結service

今天在學習aidl通訊的時候,使用的是兩個應用,乙個充當客戶端,乙個充當服務端,在使用客戶端繫結服務端的服務的時候一直繫結不成功。原來是使用的魅藍機型的問題。上 服務端androidmanifest.xml部分 沒啥說的 客戶端 示例1 魅藍和華為都可以繫結成功 private void binds...

安卓之service簡單介紹

一 什麼是service 二 如何使用service 三service的生命週期 一 什麼是service 二 如何使用service package jason.tutorial import android.content.intent import android.os.binder impo...