startservice與bindservice混合使用

 

【start】
oncreate()
onstart()

【bind】
沒有打印信息

【stop】
沒有打印信息                 

【unbind】
unbind
destory()

服務已經被停止了

 

一個服務被stop之後不一定會被destory()
但是如果destory()了一定被stop了
停止服務 和 銷燬服務 是兩個概念

如果一個被停止的服務仍然有ServiceConnection對象通過BIND_AUTO_CREATE綁定到它上面,它不會被銷燬直到綁定對象被移除

有了這個我們理解了 爲什麼有這樣現象發生了 它只是stop了服務並沒有銷燬服務 所以 你點stop沒有反應 但是這個時候 服務其實已經被停止了 你再點unbind因爲所有綁定到服務上的客戶端都已經解綁定了 所以android 操作系統就銷燬了 這個 service

網上有很多人 有誤解 認爲 只要綁定到服務上的客戶端全部解綁定了 這個服務就被銷燬了 其實也錯了 看下面這段原文:

第一段話的意思是:

如果你同意你的服務被開啓和綁定,然後當服務被開啓的時候,當所有的客戶端都解除對服務的綁定android操作系統也不會銷燬這個服務,相反的你必須顯示的調用stopSelf()

或者stopService()方法來停止服務

第二段話的意思是:

當最後一個客戶端從服務上被解綁定的時候操作系統就銷燬服務(除非這個服務是使用startService()的方式啓動的)

從這兩段話就可以看出 問題的所在了

然後 很多人 可能看到了這句話:

這句話 很明顯 也是說 如果是startService 方式開啓纔不會被銷燬 因爲onstartCommand()很明顯是一個 startService的生命週期中才有的回調函數

所以說 很多人覺得 他沒有說 startService方式 但是也是 都解綁定之後就銷燬了 應該是解綁定之後就會銷燬 其實不是這樣的! 它暗含的意思就是告訴你這個方式是startService()

好了 說了 這麼多 總之這個程序的執行流程就是這樣的:

startservice->調用oncreate()方法->stopservice->停止service但沒有銷燬->unbind->調用unbind方法調用destory()方法

結束

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