8

在 Android 服务中,有没有办法确定绑定了多少客户端?

4

3 回答 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 回答