Android 服務(二)BindService

一 服務除了上一篇提到的方式,還有一種就是BindService,那麼大家肯定有疑問了,爲什麼會採取BindService這種方式呢?

1、採用Bound Services方式,不僅可以啓動服務,還可調用服務裏面的方法;
  

2、但BindService方法不會引發OnStartCommand事件,故也無StartCommandResult可利用;綁定的意義在於服務方法的調用;

也就是說,當我們想調用服務裏面的某一個方法時,就需要BindService這種形式了。

所以綁定服務的意義完全在於調用服務裏面的方法。

二 服務的生命週期(從創建到銷燬)有兩條路徑:

被啓動的服務(startedservice)

         當服務被一個組件通過startService()函數啓動後,這個服務就會獨立的運行,必須被自己用stopSelf()函數或者其他組件用stopService()函數來停止。一旦服務被停止,系統就會銷燬它。

綁定的服務(bound service)

         當一個服務被另一個組件通過bindService()函數創建後,客戶就會通過IBinder接口和服務進行交互。客戶可以通過unbindService()函數關閉連接(解除綁定 )。多個客戶可以綁定到同一個服務,當所有客戶都關閉和服務連接(解除綁定 )後,系統會銷燬服務(服務沒有必要自己停止自己)。

 

這兩條路徑並不是完全分離的。這是因爲你可以綁定一個被啓動的服務(started service)。例如,一個音樂播放服務可能被startService()函數啓動來播放一首歌曲。過了一會兒,可能用戶想要在播放器做一些操作或者獲取關於當前歌曲的信息,一個activity就會通過bindService()函數綁定到該服務。started service + bindService 這種情況下,調用stopService()或 stopSelf() 不會真的停止服務,直到所有綁定的客戶都解除綁定(關閉連接)。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章