service學習加開發(fā)經(jīng)驗
startservice啟動流程同act啟動流程類似
(都是通過ams恨豁,流程圖也不畫了奠骄,畢竟網(wǎng)上那么多
可參考http://www.reibang.com/p/4a20d9d68482
圖2 類似于act的啟動)
bindservice啟動流程沒去看。
生命周期
startservice:oncreate==》onStartCommand
調(diào)用多次startService剩瓶,onCreate只有第一次會被執(zhí)行驹溃,而onStartCommand會執(zhí)行多次城丧。
結(jié)束服務時,調(diào)用stopService豌鹤,生命周期執(zhí)行onDestroy方法亡哄,并且多次調(diào)用stopService時,onDestroy只有第一次會被執(zhí)行傍药。
開啟服務以后磺平,與activity就沒有關(guān)聯(lián),不受影響拐辽,獨立運行。
bindserviec:
1.onbind返回null:oncreare==》onbind
2.onbind不返回null:oncreare==》onbind==》onServiceConnected
用多次bindService擦酌,onCreate和onBind也只在第一次會被執(zhí)行(onServiceConnected執(zhí)行多次)俱诸。
調(diào)用unbindService結(jié)束服務,生命周期執(zhí)行onDestroy方法赊舶,并且unbindService方法只能調(diào)用一次睁搭,多次調(diào)用應用會拋出異常。使用時也要注意調(diào)用unbindService一定要確保服務已經(jīng)開啟笼平,否則應用會拋出異常园骆。
開啟服務以后,與activity存在關(guān)聯(lián)寓调,退出activity時必須調(diào)用锌唾。
注意:service可以同時start,bind夺英。沒有先后順序晌涕。但oncreate只會執(zhí)行一次。關(guān)閉的時候需要stop和unbind都調(diào)用痛悯,也沒有先后順序余黎。如果只使用一種方式關(guān)閉,ondestory都不會被執(zhí)行载萌,服務也不會被關(guān)閉惧财。
關(guān)閉服務需要stopService和unbindService都被調(diào)用,也沒有先后順序的影響扭仁,MyService的onDestroy也只執(zhí)行一次垮衷。但是如果只用一種方式關(guān)閉服務,不論是哪種關(guān)閉方式斋枢,onDestroy都不會被執(zhí)行帘靡,服務也不會被關(guān)閉。這一點需要注意瓤帚。
最后描姚,不管是start還是bind啟動service涩赢,service的生命周期都運行在ui線程。