在一個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. 如何找到一個WCF服務多少次由客戶端
- 6. 綁定RadListView客戶端端
- 7. 綁定問題.NET客戶端到HPOM Web服務
- 8. 如何確定客戶端連接的服務器IP地址
- 9. 如何確定服務器控件的客戶端名稱?
- 10. 如何確定從SignalR客戶端斷開服務器?
- 11. 綁定到服務是否將客戶端連接到新的服務實例?
- 12. 客戶端 - 服務器。如何轉移到客戶端,一個自定義類?
- 13. Android:綁定服務同時處理來自客戶端的多個消息
- 14. Web網格,客戶端綁定VS.服務器端HTML生成
- 15. WCF客戶端和服務端點使用相同的綁定
- 16. AngularJS客戶端的數據綁定和服務器端模板
- 17. WCF服務參考不包括綁定和客戶端端點
- 18. javascript客戶端中的服務器端數據綁定
- 19. 確定客戶端重新連接到服務器
- 20. android aidl無法綁定到服務,當主機安裝在客戶端後
- 21. 如何通過客戶端使用WCF服務將數據綁定到DropDownList
- 22. Android客戶端Web服務
- 23. Android客戶端服務器
- 24. Android客戶端 - Java服務器:一臺服務器可以同時支持多少個客戶端?
- 25. 綁定Telerik RadTreeView客戶端
- 26. 綁定在客戶端+ WCF
- 27. RadGrid客戶端綁定
- 28. udp客戶端綁定
- 29. Android - 綁定到服務
- 30. Android綁定到服務
+1但是,如果你在同一進程中的客戶端上運行的本地服務這僅適用。如果您的服務在遠程進程中運行,則它不起作用,如果您向不屬於您的應用程序的多個客戶端提供服務,它也不起作用。 – 2012-08-07 18:27:23
David是對的,我的示例只適用於本地服務。 – 2012-08-08 00:44:42
我還沒有實現RemoteService的需要,所以我不確定RemoteCallback列表如何用於使我的示例與RemoteService一起工作。 – 2012-08-08 00:53:40