我有活動和服務。當活動啓動時,即使活動被銷燬,它也會調用startService()
使該服務處於活動狀態,並且bindService()
與本服務進行通信。Android服務:onBind(意圖)和onUnbind(意圖)只被調用一次
bindService()
返回true,調用mService.onBind()
,調用ServiceConnection.onServiceConnected()
。所有作品。
當我按回退鍵銷燬我的活動時,它調用unbindService()
,我的mService.onUnbind()
被調用。 (我在這個onUnbind()
返回false
。)
然後我重新開始這個活動,bindService()
返回true,然後mService.onBind()
是不叫!但是ServiceConnection.onServiceConnected()
也被稱爲,並且全部重新工作。
它看起來像Dalvik記得我上次返回的是onBind()
,並且不再調用onBind()
。當我再次摧毀我的活動時,onUnbind()
是不是也叫。
我可以將此服務綁定到我的活動並將其解除綁定任意次數,但這些方法不會再被調用,直到我通過解除綁定並調用stopService()
來銷燬服務。
在文檔中我找不到任何這種行爲的解釋。相反,this figure顯示onBind()
和onUnbind()
應該每次客戶端綁定和解除綁定服務。這個數字可以在this Dev Guide的底部找到。
哦謝謝。不幸的是,我錯過了這個。然而,我發現我可以在'onUnbind()'中返回true,然後'onRebind()'和'onUnbind()'將被調用給下一個客戶端。 – 2012-01-10 04:52:19
該文檔實際上是誤導性的。它說沒有更多的'onBind()'調用完成,但是這隻適用於多個客戶端的情況。 Docs還說:「如果您的服務已啓動並接受綁定,那麼當系統調用onUnbind()方法時,如果您希望下次客戶端綁定到onRebind()時接收到對onRebind()的調用,則可以選擇返回true服務(**而不是接收對onBind()**)的調用「)。只有沒有調用'onBind()'。另一種情況是文檔錯誤。 – Malcolm 2012-04-08 17:17:33
抱歉在@Malcolm中碰到...我有一個關於Binding和unBinding的問題。怎麼樣,如果我把一個ServerSocket線程內的服務,並在活動 - 我把onStart()和onStop()綁定和解除綁定相應。如果我轉移到另一個活動並重新綁定它,它會被重新創建嗎?或者線程仍然是最後一個? – gumuruh 2014-08-20 12:49:44