Android: как определить, сколько клиентов привязано к услуге?
В сервисе Android есть способ определить, сколько клиентов к нему привязано?
3 ответа
Нет 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());
}
}
Вы можете отслеживать подключенных клиентов, переопределив onBind()
(увеличить количество), onUnbind()
(уменьшить количество и вернуть true
) а также onRebind()
(увеличить количество).
Кажется, нет простого, стандартного способа сделать это. Я могу придумать 2 способа. Вот простой способ:
Добавить вызов в API вашего сервиса, как disconnect()
, Клиент должен позвонить disconnect()
прежде чем это вызовет unbindService()
, Создайте переменную-член в службе, как private int clientCount
отслеживать количество связанных клиентов. Отслеживайте количество связанных клиентов, увеличивая количество в onBind()
и уменьшая его в disconnect()
,
Сложный способ включает в себя реализацию интерфейса обратного вызова от вашего сервиса к клиентам и использование RemoteCallbackList
определить, сколько клиентов на самом деле связано.