我有活动和服务。当Activity启动时,它会调用startService()
以使该服务在活动被销毁时保持活动状态,并bindService()
与此服务进行通信。
bindService()
返回true,调用mService.onBind()
,同时调用ServiceConnection.onServiceConnected()
。一切都有效。
当我通过按返回键销毁我的活动时,它会调用unbindService()
,并调用我的mService.onUnbind()
。 (我在此false
中返回onUnbind()
。)
然后我再次启动此活动,bindService()
返回true,然后mService.onBind()
NOT 被调用!但ServiceConnection.onServiceConnected()
也被调用,而且一切都有效。
看起来Dalvik记得我onBind()
上次返回的内容,并且没有再次致电onBind()
。当我再次销毁我的活动时,onUnbind()
NOT 也被调用。
我可以多次绑定和取消绑定此Service到我的Activity,但是在通过解除绑定并调用stopService()
来销毁Service之前,不会再调用这些方法。
在docs中,我无法找到对此行为的任何解释。相反,this figure表示每次客户端绑定和取消绑定服务时都应调用onBind()
和onUnbind()
。这个数字可以在this Dev Guide的底部找到。
答案 0 :(得分:53)
我认为this(从官方开发指南中引用)可以解释您的所有疑问:
多个客户端可以立即连接到该服务。但是,只有在第一个客户端绑定时,系统才会调用服务的onBind()方法来检索IBinder。然后,系统将相同的IBinder传递给任何其他绑定的客户端,而无需再次调用onBind()。
答案 1 :(得分:0)
你可以在这里找到它: https://developer.android.com/guide/components/bound-services.html
您可以同时将多个客户端连接到服务。但是,系统缓存IBinder服务通信信道。换句话说,只有当第一个客户端绑定时,系统才会调用服务的onBind()方法来生成IBinder。然后系统将相同的IBinder传递给绑定到同一服务的所有其他客户端,而无需再次调用onBind()。