我們做幾個實驗:
1,啟動service
后,按back鍵返回。
一開始我沒在service
中用子線程來調用方法,結果導致點擊屏幕沒有響應,但是菜單按鈕和會主界面的
按鈕可以按,因為,service
還是運行在主線程中的,后面我用子線程調用方法,測試的結果是:
用startService()
啟動之后,按back
鍵,activity
被destroy,但是service
繼續(xù)在運行,也就是說,當
activity
被銷毀后,主線程并沒有被銷毀,并且程序運行完后,service
也沒有destroy。而用bindService()
啟動之后,按back鍵,activity
被銷毀,然后onUnbindService
,然后ServiceDestroy
,但是程序還是一直
運行,也就是說bindServic
e和activity
是綁定的,當activity
消亡時,這個service也消亡。同時這里得提一下,
當這個service
消亡時,是只運行service
中的onUnbind()
方法,不會去運行activity
中的onServiceDisconnected()
方法。
2,分別多次按startService
按鈕和BoundService
按鈕,看看情況
結果是startService
按鈕是第一次創(chuàng)建service
后,后面每次按都不會再創(chuàng)建,但是都會執(zhí)行onStartCommand()
方法,
而對于bindService而言,按一次之后再按不會有變化,但是如果將conn
這個變量在BoundService
按鈕的
方法體中再次賦值(之前是在onCreate中賦值),那么結果就不同,當按下一次后再按,結果就會再次執(zhí)行,再按,再執(zhí)行,
當然如果你調用的方法的執(zhí)行需要時間,比如打印1-100的數,那么兩次結果會穿插輸出,而當你按unBound按鈕時,就會發(fā)現
當你按一次時,它不會調用service
中的onUnbind()方法,service
也不會被destroy,但是再按一次就會報錯,內容大概是
service
沒有registered(發(fā)生這種情況的原因是這里的conn會跟最后一個按BoundService按鈕時候生成的conn一致。)。這與按一次BoundService按鈕,再按一次unBoundService按鈕結果不
同,這時按unBoundService的結果是會調用service
中的onUnbind()
方法,service
也會被destroy
。為什么多按幾次BoundButton再按一次unBoundButton不會調用service中的onUnbind()方法,
service
也不會被destroy
呢?但是這個service
應該是被unBind的了的,不然的話第二次按的話為什么會出現這個service
沒有registered的錯誤呢,那么如何被onunBind的呢?而后,我想到
將所產生的conn全部存儲起來,然后分別當作參數傳遞給activity
中的unbindService(conn)
方法,
于是我將點擊bindButton按鈕產生的所有ServiceConnection
的對象全都存儲到一個
ServiceConnnection
的數組中,然后在unBindButton中將數組的值分別賦值給conn,這樣的話當你點擊bindButton
產生多個ServiceConnection
對象后,點擊unBindButton按鈕就會依次解除綁定,當你解除最后一個service時,就會調用
onUnbind
和destroy
方法,也就是說,其實onUnbind
方法是等所有的service
解除綁定后才調用,所以之前只解除一個service
時并沒有調用這個方法,也就沒有destroy
,因為這個service
和activity
還是處在綁定的狀態(tài)。
startService與BindService的區(qū)別
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
推薦閱讀更多精彩內容
- Android執(zhí)行Service有兩種方法,一種是startService,一種是bindService。下面讓我...
- Android執(zhí)行Service有兩種方法,一種是startService,一種是bindService。下面讓我...
- 轉自Android四大基本組件介紹與生命周期Android四大基本組件分別是Activity,Service服務,...
- Service是Android四大組件中與Activity最相似的組件,他們都代表可執(zhí)行的程序,Service與A...