在 Android 服务中,有没有办法确定绑定了多少客户端?
问问题
2839 次
3 回答
5
没有 API 可以找出有多少客户端绑定到服务。
如果您正在实现自己的服务,那么在您的 ServiceConnection 中,您可以增加/减少引用计数以跟踪绑定客户端的数量。
以下是一些演示该想法的伪代码:
MyService extends Service {
...
private static int sNumBoundClients = 0;
public static void clientConnected() {
sNumBoundClients++;
}
public static void clientDisconnected() {
sNumBoundClients--;
}
public static int getNumberOfBoundClients() {
return sNumBoundClients;
}
}
MyServiceConnection extends ServiceConnection {
// Called when the connection with the service is established
public void onServiceConnected(ComponentName className, IBinder service) {
...
MyService.clientConnected();
Log.d("MyServiceConnection", "Client Connected! clients = " + MyService.getNumberOfBoundClients());
}
// Called when the connection with the service disconnects
public void onServiceDisconnected(ComponentName className) {
...
MyService.clientDisconnected();
Log.d("MyServiceConnection", "Client disconnected! clients = " + MyService.getNumberOfBoundClients());
}
}
于 2012-08-07T18:11:52.817 回答
0
似乎没有一种简单、标准的方法可以做到这一点。我可以想到2种方法。这是简单的方法:
添加对服务 API 的调用,例如disconnect()
. 客户端应该在调用disconnect()
之前调用unbindService()
。在服务中创建一个成员变量,private int clientCount
以跟踪绑定客户端的数量。onBind()
通过递增 in和递减 in来跟踪绑定客户端的数量disconnect()
。
复杂的方法涉及实现从您的服务到客户端的回调接口,并RemoteCallbackList
用于确定实际绑定了多少客户端。
于 2012-08-07T18:25:32.193 回答
0
onBind()
您可以通过覆盖(增加计数)、onUnbind()
(减少计数和返回true
)和(增加计数)来跟踪连接的客户端onRebind()
。
于 2013-02-23T21:12:11.603 回答