In un servizio Android, c'è un modo per determinare quanti client ci sono associati?Android: come determinare quanti client sono associati a un servizio?
risposta
Non c'è API per scoprire quanti client sono associati a un servizio.
Se si sta implementando il proprio servizio, nel ServiceConnection è possibile incrementare/ridurre un conteggio dei riferimenti per tenere traccia del numero di client associati.
seguito è un codice psudo per dimostrare l'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());
}
}
Non sembra essere un modo standard di semplice per farlo. Posso pensare a 2 modi. Ecco il modo semplice:
Aggiungi una chiamata all'API del tuo servizio come disconnect()
. Il client deve chiamare disconnect()
prima di chiamare unbindService()
. Creare una variabile membro nel servizio come private int clientCount
per tenere traccia del numero di client associati. Tenere traccia del numero di client associati incrementando il conteggio in onBind()
e diminuendolo in disconnect()
.
Il modo complicato prevede l'implementazione di un'interfaccia di callback dal servizio ai client e l'utilizzo di RemoteCallbackList
per determinare quanti client sono effettivamente associati.
È possibile tenere traccia dei client connessi sovrascrivendo onBind()
(Aumento conta), onUnbind()
(conteggio diminuzione e tornare true
) e onRebind()
(conteggio aumento).
Secondo [questo] (https://groups.google.com/forum/#!msg/android-developers/2IegSgtGxyE/iXP3lBCH5SsJ), 'onBind()' viene chiamato una volta per la prima richiesta e un 'IBinder memorizzato nella cache ' viene restituito dal sistema su richieste successive senza disturbare il servizio. La documentazione relativa a questo problema non è corretta. – Daniel
- 1. Ratchet/Websockets: quanti clienti si sono iscritti a un oggetto?
- 2. Node.js: Quanti client Redis?
- 3. Come contare quanti ascoltatori sono collegati a un evento?
- 4. Client servizio WSDL/SOAP Android
- 5. quali eventi sono associati?
- 6. Quanti strati sono troppi?
- 7. Quanti EJB sono troppi?
- 8. Quanti NSTimers sono troppi?
- 9. Indici MySQL: quanti sono sufficienti?
- 10. Quanti PHP include sono troppi?
- 11. Quali problemi di scalabilità sono associati a NetworkX?
- 12. Java: verificare quali processi sono associati a una porta?
- 13. Connessione a un servizio Web utilizzando l'autenticazione del certificato client
- 14. Impossibile collegarsi a Tridion Core Service da un client Android
- 15. Come determinare quanti elementi da un intervallo rientrano in un altro intervallo?
- 16. Come aggiungere un servizio di sistema a Android Framework
- 17. Android quanti thread posso avere?
- 18. Determinare quanti argomenti (facoltativi) sono stati effettivamente passati alla funzione VBA?
- 19. Come posso sapere quali eventi sono associati a un elemento DOM?
- 20. Come forzare il client WCF a inviare un certificato client?
- 21. client socket.io: come determinare se un gestore è già installato
- 22. Durata servizio client WCF
- 23. Quanti join sono fattibili nella pratica
- 24. categorie PrestaShop associati a product.tpl
- 25. Identificazione dei client in un servizio WCF
- 26. Quanti sono troppi in <HEAD>?
- 27. Quanti elementi dell'array non sono nulli?
- 28. collegamento client Android a sails.js
- 29. Quanti controlli contro null sono appropriati?
- 30. servizio web asmx: autenticazione client
+1 Tuttavia, questo funziona solo se si dispone di un servizio locale in esecuzione nello stesso processo dei client. Non funziona se il tuo servizio è in esecuzione in un processo remoto e non funziona anche se offri il tuo servizio a più client che non fanno parte della tua applicazione. –
David ha ragione, il mio esempio funzionerà solo per un servizio locale. –
Non ho ancora avuto la necessità di implementare un RemoteService, quindi non sono sicuro di come sarebbe stato usato l'elenco RemoteCallback per far funzionare il mio esempio con un RemoteService. –