Android 서비스에서 얼마나 많은 클라이언트가 바인딩되어 있는지 확인할 수있는 방법이 있습니까?Android : 서비스에 바인딩되는 클라이언트 수를 결정하는 방법은 무엇입니까?
답변
서비스에 바인딩 된 클라이언트 수를 확인하는 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());
}
}
이 작업을 수행 할 수있는 쉬운 표준 방법이있을 것 같지 않습니다
다음
는 아이디어를 설명하는 몇 가지 psudo 코드입니다. 나는 2 가지 방법을 생각할 수있다. 다음은 간단한 방법입니다.disconnect()
과 같은 서비스 API에 대한 호출을 추가하십시오. 클라이언트는 unbindService()
을 호출하기 전에 disconnect()
으로 전화해야합니다. 바운드 클라이언트 수를 추적하려면 private int clientCount
과 같은 서비스의 멤버 변수를 만듭니다. 카운트를 onBind()
에서 증가시키고이를 disconnect()
에서 감소시켜 바운드 클라이언트 수를 추적하십시오.
복잡한 방법으로 서비스에서 클라이언트로 콜백 인터페이스를 구현하고 RemoteCallbackList
을 사용하여 실제로 얼마나 많은 클라이언트가 바인딩되는지 확인해야합니다.
당신은 onBind()
(증가 수), onUnbind()
재정 의하여 연결된 클라이언트를 추적 (감소 수를하고 true
을 반환) 및 onRebind()
(증가 수) 할 수 있습니다.
[this] (https://groups.google.com/forum/#!msg/android-developers/2IegSgtGxyE/iXP3lBCH5SsJ)에 따르면, onBind()는 첫 번째 요청에 대해 한 번 호출되고 캐시 된 'IBinder' 서비스를 방해하지 않고 후속 요청에서 시스템에 의해 반환됩니다. 이 문제와 관련된 설명서가 잘못되었습니다. – Daniel
- 1. akka에서 스폰하는 액터 수를 결정하는 방법은 무엇입니까?
- 2. OpenJPA에서 FetchBatchSize의 수를 결정하는 방법은 무엇입니까?
- 3. Tomcat에서 최적의 스레드 수를 결정하는 방법은 무엇입니까?
- 4. 하드웨어 스레드 수를 결정하는 방법
- 5. Android WebView가 완전히로드되는시기를 결정하는 방법은 무엇입니까?
- 6. Android 기기의 속도를 결정하는 방법은 무엇입니까?
- 7. FAT12/FAT16 - 섹터 수를 결정하는 요소는 무엇입니까?
- 8. 실행중인 Android 서비스에 바인딩하는 방법은 무엇입니까?
- 9. 힙 메모리와 함께 병렬 맵퍼/리듀서의 수를 결정하는 방법은 무엇입니까?
- 10. IIS 7에서 사이트 제한 수를 결정하는 방법은 무엇입니까?
- 11. Java-VM에서 사용할 수있는 스레드의 최대 수를 결정하는 방법은 무엇입니까?
- 12. VARCHAR 필드 값의 바이트 수를 결정하는 방법은 무엇입니까?
- 13. Java에서 만들 스레드의 적절한 수를 결정하는 방법은 무엇입니까?
- 14. mysql 파티션의 수를 결정하는 방법
- 15. 저장소를 결정하는 방법은 무엇입니까?
- 16. Java에서 동적으로 바인딩되는 메서드는 무엇입니까?
- 17. Delphi에서 보안 웹 서비스에 대한 클라이언트 인증을 처리하는 방법은 무엇입니까?
- 18. 스크롤되는 터치 수를 결정하는 방법 UITableView
- 19. TcpListener가 수락 할 수있는 클라이언트 수를 제한하는 방법은 무엇입니까?
- 20. 가속도계를 통해 방향을 결정하는 방법은 무엇입니까?
- 21. Android 애플리케이션이 난독 화되었는지 여부를 프로그래밍 방식으로 결정하는 방법은 무엇입니까?
- 22. Android 인 텐트의 예상 인수를 결정하는 방법은 무엇입니까?
- 23. 점검 대상을 결정하는 방법은 무엇입니까?
- 24. 인증서의 루트를 결정하는 방법은 무엇입니까?
- 25. 유형 입력란을 결정하는 방법은 무엇입니까?
- 26. 개체의 크기를 결정하는 방법은 무엇입니까?
- 27. 현재 행을 결정하는 방법은 무엇입니까?
- 28. 호스트의 CPU를 결정하는 방법은 무엇입니까?
- 29. 문자 유사성을 결정하는 방법은 무엇입니까?
- 30. 게놈의 특성을 결정하는 방법은 무엇입니까?
+1 그러나 로컬 서비스가 클라이언트와 동일한 프로세스에서 실행되는 경우에만 작동합니다. 서비스가 원격 프로세스에서 실행 중이고 응용 프로그램에 포함되지 않은 여러 클라이언트에 서비스를 제공하는 경우 서비스가 작동하지 않는 경우 작동하지 않습니다. –
David가 맞습니다. 본보기는 로컬 서비스에서만 작동합니다. –
아직 RemoteService를 구현할 필요가 없으므로 RemoteCvice를 사용하여 예제를 작성하는 데 RemoteCallback 목록을 사용하는 방법을 모르겠습니다. –