在一个Android服务中,有没有一种方法可以确定绑定了多少个客户端?Android:如何确定有多少客户端绑定到服务?
回答
有没有API来找出有多少客户端绑定到服务。
如果您正在实施自己的服务,那么在ServiceConnection中,您可以递增/递减引用计数以跟踪绑定客户端的数量。
以下是一些psudo代码验证这个想法:
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());
}
}
似乎有不被这样做一个简单的,标准的方式。我可以想到2种方法。下面是简单的方法:
添加调用服务的API像disconnect()
。客户应在拨打unbindService()
之前致电disconnect()
。在服务中创建一个成员变量,如private int clientCount
以跟踪绑定客户端的数量。通过递增onBind()
中的计数并在disconnect()
中递减计数来跟踪绑定客户端的数量。
的复杂的方式包括从服务到客户端实现的回调接口,并使用RemoteCallbackList
,以确定有多少客户实际的约束。
您可以通过覆盖onBind()
(增加计数),onUnbind()
跟踪所连接的客户端(减计数和返回true
)和onRebind()
(增加数)。
根据[此](https://groups.google.com/forum/#!msg/android-developers/2IegSgtGxyE/iXP3lBCH5SsJ),'onBind()'对第一请求和缓存'IBinder'调用一次由系统在后续请求中返回而不会影响服务。有关此问题的文档不正确。 – Daniel 2015-02-12 16:13:15
- 1. Android:如何绑定服务可以注意到有关被杀的客户端?
- 2. WCF:如何找到有多少客户端访问服务
- 3. MULE ESB:将多个Web服务绑定到一个客户端
- 4. 客户端 - 服务器代码。如何绑定到特定端口
- 5. 绑定RadListView客户端端
- 6. 如何确定服务器控件的客户端名称?
- 7. 如何确定从SignalR客户端断开服务器?
- 8. 客户端 - 服务器。如何转移到客户端,一个自定义类?
- 9. Android:绑定服务同时处理来自客户端的多个消息
- 10. javascript客户端中的服务器端数据绑定
- 11. Web网格,客户端绑定VS.服务器端HTML生成
- 12. 如何通过客户端使用WCF服务将数据绑定到DropDownList
- 13. Android客户端Web服务
- 14. Android客户端服务器
- 15. Android客户端 - Java服务器:一台服务器可以同时支持多少个客户端?
- 16. Android - 绑定到服务
- 17. Android绑定到服务
- 18. RadGrid客户端绑定
- 19. ESP8266 wifi服务器到Android客户端
- 20. 具有多个客户端的Java服务器客户端
- 21. 如何确定您的服务器有多少空间? (php)
- 22. 如何确定在客户端
- 23. 自动定位客户端服务器
- 24. 如何通过Netty代理确定服务器端的客户端IP?
- 25. 多线程服务器和客户端Java指定客户端线程
- 26. 客户端无法绑定到给定的端口并连接到给定的服务器
- 27. WCF:客户端和服务绑定可能不匹配?
- 28. 服务器和客户端的不同Dbus绑定
- 29. WCF - 客户端和>服务绑定可能不匹配
+1但是,如果你在同一进程中的客户端上运行的本地服务这仅适用。如果您的服务在远程进程中运行,则它不起作用,如果您向不属于您的应用程序的多个客户端提供服务,它也不起作用。 – 2012-08-07 18:27:23
David是对的,我的示例只适用于本地服务。 – 2012-08-08 00:44:42
我还没有实现RemoteService的需要,所以我不确定RemoteCallback列表如何用于使我的示例与RemoteService一起工作。 – 2012-08-08 00:53:40