Trong một dịch vụ Android, có cách nào để xác định có bao nhiêu khách hàng bị ràng buộc với nó?Android: Cách xác định số lượng khách hàng bị ràng buộc với một dịch vụ?
Trả lời
Không có API để tìm hiểu số lượng khách hàng bị ràng buộc với Dịch vụ.
Nếu bạn đang thực hiện dịch vụ của riêng mình, thì trong ServiceConnection của bạn, bạn có thể tăng/giảm số lượng tham chiếu để theo dõi số lượng khách hàng bị ràng buộc.
Sau đây là một số mã psudo để chứng minh ý tưởng:
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());
}
}
Hiện không có vẻ là một cách tiêu chuẩn dễ dàng để làm điều này. Tôi có thể nghĩ ra 2 cách. Dưới đây là cách đơn giản:
Thêm cuộc gọi vào API dịch vụ của bạn như disconnect()
. Khách hàng nên gọi số disconnect()
trước khi gọi số unbindService()
. Tạo biến thành viên trong dịch vụ như private int clientCount
để theo dõi số lượng khách hàng bị ràng buộc. Theo dõi số lượng khách hàng bị ràng buộc bằng cách tăng số lượng trong onBind()
và giảm số lượng trong disconnect()
.
Cách phức tạp liên quan đến việc triển khai giao diện gọi lại từ dịch vụ của bạn cho khách hàng và sử dụng RemoteCallbackList
để xác định số lượng khách hàng thực sự bị ràng buộc.
Bạn có thể theo dõi các khách hàng được kết nối bằng cách ghi đè onBind()
(tăng count), onUnbind()
(count giảm và trở về true
) và onRebind()
(tăng count).
Theo [this] (https://groups.google.com/forum/#!msg/android-developers/2IegSgtGxyE/iXP3lBCH5SsJ), 'onBind()' được gọi một lần cho yêu cầu đầu tiên và được lưu trong bộ nhớ cache 'IBinder' được trả về bởi hệ thống về các yêu cầu tiếp theo mà không làm phiền dịch vụ. Tài liệu liên quan đến vấn đề này không chính xác. – Daniel
- 1. dịch vụ bị ràng buộc so với dịch vụ bắt đầu trên Android và cách thực hiện cả hai
- 2. Khi nào Dịch vụ bắt đầu và bị ràng buộc bị hủy?
- 3. Câu hỏi về dịch vụ của Android về ràng buộc/hủy liên kết?
- 4. Chuyển số lượng lớn dữ liệu trong dịch vụ WCF
- 5. WCF MSMQ ràng buộc với một dịch vụ IIS - làm thế nào để nhanh chóng dịch vụ?
- 6. Truy cập mục bị ràng buộc với hàng DataGridView (WinForms)
- 7. Ràng buộc Dịch vụ vào android.app.Activity và Liên kết dịch vụ với android.app.Application
- 8. Dịch vụ Android: Ràng buộc theo yêu cầu và Liên kết với #onCreate()
- 9. Tuyên truyền lực lượng giá trị bị ràng buộc
- 10. Ràng buộc với một dịch vụ từ một ứng dụng khác
- 11. Xác định các khách hàng trong một invocation .NET Remoting
- 12. Dịch vụ Android đã bị giết
- 13. Ràng buộc và kết nối một dịch vụ android bên ngoài hoạt động
- 14. Gửi một đối tượng đến một dịch vụ thông qua Intent mà không cần ràng buộc
- 15. Hiểu xem mẫu mã có bị ràng buộc CPU hay bị ràng buộc bởi bộ nhớ
- 16. Ràng buộc duy nhất với giá trị được xác định
- 17. Triển khai Dịch vụ WCF với cả ràng buộc http/https và các điểm cuối
- 18. WCF: Nhiều cấu hình ràng buộc cho một dịch vụ đơn lẻ
- 19. Dọn dẹp ràng buộc/không liên kết với Dịch vụ trong Đơn đăng ký
- 20. Nhận dạng khách hàng trong dịch vụ WCF
- 21. Chuyển đổi một hình thức không ràng buộc thành một hình thức bị ràng buộc?
- 22. Cách xác định hàm ràng buộc bên trong mẫu GStringTemplateEngine?
- 23. MvvMCross Ràng buộc với chuỗi định dạng
- 24. Cách tạo dịch vụ Windows với các tham số?
- 25. WCF - Là chứng chỉ dịch vụ cần thiết để xác thực khách hàng?
- 26. Làm thế nào để tạo một máy khách web dịch vụ CXF với điểm cuối động?
- 27. Làm thế nào một Dịch vụ Android có thể biết rằng nó không bị ràng buộc với bất kỳ Hoạt động nào
- 28. Dịch vụ WCF được lưu trữ trong IIS với ràng buộc net.msmq tạo ra sự cố
- 29. Namespace không bị ràng buộc trong Android Studio
- 30. Cách sử dụng Dịch vụ WCF với Android
+1 Tuy nhiên, điều này chỉ hoạt động nếu bạn có một dịch vụ cục bộ chạy trong cùng một quá trình với khách hàng của bạn. Nó không hoạt động nếu dịch vụ của bạn đang chạy trong một quá trình từ xa và nó cũng không hoạt động nếu bạn cung cấp dịch vụ của bạn cho nhiều khách hàng không phải là một phần của ứng dụng của bạn. –
David là đúng, ví dụ của tôi sẽ chỉ làm việc cho một dịch vụ địa phương. –
Tôi chưa có nhu cầu triển khai RemoteService, vì vậy tôi không chắc chắn danh sách RemoteCallback sẽ được sử dụng như thế nào để làm ví dụ của tôi làm việc với RemoteService. –