En un servicio de Android, ¿hay alguna manera de determinar cuántos clientes están obligados a hacerlo?Android: ¿Cómo determinar cuántos clientes están vinculados a un servicio?
Respuesta
No hay API para averiguar cuántos clientes están vinculados a un servicio.
Si está implementando su propio servicio, en su ServiceConnection puede incrementar/disminuir un recuento de referencias para realizar un seguimiento del número de clientes enlazados.
A continuación se presenta un cierto código psudo para demostrar la idea:
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());
}
}
No parece ser una manera fácil, estándar de hacer esto. Puedo pensar en 2 maneras. Aquí está la manera simple:
Agregue una llamada a la API de su servicio como disconnect()
. El cliente debe llamar al disconnect()
antes de llamar al unbindService()
. Cree una variable miembro en el servicio como private int clientCount
para realizar un seguimiento del número de clientes enlazados. Realice un seguimiento del número de clientes enlazados incrementando el recuento en onBind()
y disminuyéndolo en disconnect()
.
La manera complicada consiste en implementar una interfaz de devolución de llamada desde su servicio a los clientes y utilizando RemoteCallbackList
para determinar cuántos clientes están realmente vinculados.
Puede hacer un seguimiento de los clientes conectados anulando onBind()
(aumento de recuento), onUnbind()
(recuento de descenso y volver true
) y onRebind()
(aumento de recuento).
Según [esto] (https://groups.google.com/forum/#!msg/android-developers/2IegSgtGxyE/iXP3lBCH5SsJ), 'onBind()' se llama una vez para la primera solicitud y un 'IBinder' en caché es devuelto por el sistema en solicitudes posteriores sin molestar al servicio. La documentación con respecto a este problema es incorrecta. – Daniel
- 1. ¿Cómo contar cuántos oyentes están conectados a un evento?
- 2. Node.js: ¿Cuántos clientes de Redis?
- 3. Cómo configurar clientes para un servicio wcf?
- 4. Determinar cuántos campos tiene un objeto Javascript
- 5. ¿Es posible saber cuántos clientes suscribieron un "canal" en redis?
- 6. ¿Cuántos ServiceContracts tiene un servicio WCF?
- 7. Identificación de clientes en un servicio WCF
- 8. ¿Cómo puedo saber si los eventos están vinculados a un elemento usando jquery?
- 9. Registros vinculados a cualquier tabla?
- 10. Objetos vinculados a salmuera
- 11. ¿Están seguros los clientes de JAX-WS?
- 12. ¿Los nuevos números de compilación autogenerados Delphi XE2 están vinculados a 1.1.2000 00:00:00?
- 13. Reutilización de clientes del servicio WCF
- 14. Weblogic clientes de servicio web. (Referencias limpios)
- 15. Cómo determinar si las pruebas PHPUnit se están ejecutando?
- 16. Android bluetooth: Lista de dispositivos vinculados
- 17. WCF: ¿se necesita un certificado de servicio para autenticar clientes?
- 18. Instrucciones de ensamblaje para encontrar cuántos hilos están habilitados en un sistema multi-core
- 19. Cómo conservar nodos XML que no están vinculados a un objeto cuando se utiliza SAX para el análisis
- 20. Demasiados archivos abiertos: cuántos están abiertos, lo que son, y cuántos puede la JVM abierta
- 21. Android: pasar AppWidgetId a un servicio
- 22. Android ¿Cuántos hilos puedo llevar?
- 23. Preguntas sobre el servicio Android sobre bind/unbind?
- 24. ¿Cómo determinar si un servicio de Android se está ejecutando en primer plano?
- 25. ¿Cómo llamar a un servicio web .NET desde android?
- 26. cómo llamo a un servicio web usando phonegap para android
- 27. ¿Cómo llamar a un servicio WCF usando ksoap2 en android?
- 28. android: determinar un enlace simbólico
- 29. ¿Hay alguna forma de determinar cuántos caracteres escribirá sprintf?
- 30. ¿Cómo determinar el IME actual en Android?
+1 Sin embargo, esto solo funciona si tiene un servicio local ejecutándose en el mismo proceso que sus clientes. No funciona si su servicio se ejecuta en un proceso remoto y tampoco funciona si ofrece su servicio a múltiples clientes que no son parte de su aplicación. –
David tiene razón, mi ejemplo solo funcionará para un servicio local. –
No he tenido la necesidad de implementar un RemoteService todavía, así que no estoy seguro de cómo se usaría la lista RemoteCallback para hacer que mi ejemplo funcione con RemoteService. –