Service生命週期詳解
服務不能自己執行,需要通過呼叫Context.startService()或Context.bindService()方法啟動服務。這兩個方法都可以啟動Service,但是它們的使用場合有所不同。使用startService()方法啟用服務,訪問者與服務之間沒有關連,即使訪問者退出了,服務仍然執行。使用bindService()方法啟用服務,訪問者與服務繫結在了一起,訪問者一旦退出,服務也就終止,大有“不求同時生,必須同時死”的特點。
這裡我主要講一講bindService過程中的細節。
如果直接在activity中通過bindservice方法來繫結服務,那麼首先得把service建立出來啊,所以是onCreate,然後是onBind,然後是ServiceConnection的onConnected。
如果先通過start方式啟動了服務,再通過bindService繫結了服務,那麼是onCreate()-->onStart()-->onBind()-->onUnbind()
多個activity繫結同一個service,採用Context.bindService()方法啟動服務,在服務未被建立時,系統會先呼叫服務的onCreate()方法,接著呼叫onBind()方法,這個時候訪問者和服務繫結在一起。 如果訪問者要與服務進行通訊,那麼,onBind()方法必須返回Ibinder物件。如果訪問者退出了,(這裡是所有的訪問者都退出了,只是其中一個的話並不會做任何事情)系統就會先呼叫服務的onUnbind()方法,接著呼叫onDestroy()方法。如果呼叫bindService()方法前服務已經被繫結,多次呼叫bindService()方法並不會導致多次建立服務及繫結(也就是說onCreate()和onBind()方法並不會被多次呼叫)。如果訪問者希望與正在繫結的服務解除繫結,可以呼叫unbindService()方法,呼叫該方法也會導致系統呼叫服務的onUnbind()-->onDestroy()方法。要注意的是,如果在沒有bindservice的情況下呼叫activity的unbindservice方法,那麼會丟擲service not registered異常,從而導致程式中斷,所以在unbind之前要看是否已經bind了。第二個訪問者在繫結的時候,會直接呼叫ServiceConnection的方法,而不會在進入service中的方法。
相關文章
- Android Service生命週期 Service裡面的onStartCommand()方法詳解Android
- vue生命週期詳解Vue
- React生命週期詳解React
- 詳解vue生命週期Vue
- 詳解Vue生命週期【上】Vue
- React 元件生命週期詳解React元件
- React元件生命週期詳解React元件
- 詳解 Vue 生命週期實現Vue
- Vue的生命週期的詳解Vue
- Java類的生命週期詳解Java
- Android Activity生命週期詳解Android
- Android Service生命週期淺析Android
- Android View的生命週期詳解AndroidView
- Servlet簡介及其生命週期詳解Servlet
- Fragment 生命週期的詳情Fragment
- Android生命週期元件Lifecycle使用詳解Android元件
- 生命週期詳細解讀(含部分原始碼)原始碼
- Vue生命週期詳解+對應程式碼解析Vue
- React原始碼分析3—React生命週期詳解React原始碼
- Activity的生命週期和啟動模式詳解模式
- 圖解vue生命週期圖解Vue
- Android中bindService的使用及Service生命週期Android
- Android中startService的使用及Service生命週期Android
- 生命週期
- Java Servlet詳解(體系結構+註解配置+生命週期)JavaServlet
- 詳解Spring中Bean的作用域與生命週期SpringBean
- Android Activity的生命週期和啟動模式詳解Android模式
- android Fragments詳解六:處理fragement的生命週期AndroidFragment
- View生命週期與Activity生命週期的關係View
- Service的啟動、繫結,以及生命週期的筆記筆記
- PHP 生命週期PHP
- Flutter - 生命週期Flutter
- sessionStorag 生命週期Session
- Fragment生命週期Fragment
- Activity生命週期
- vue - 生命週期Vue
- React生命週期React
- ubuntu生命週期Ubuntu