2012-12-23 32 views
6

Tôi có một dịch vụ giao tiếp thông qua AIDL với các dịch vụ khác. Tôi muốn dịch vụ đó bị ràng buộc bởi các hoạt động trong đơn của tôi. Dịch vụ có thể xác định hai giao diện \ giao diện không? Tôi đã thử yo sử dụng một sứ giả để giao tiếp với các hoạt động, ghi đè "onBind" phương pháp để nó trả về một chất kết dính khác nhau theo ý định nó được (một cho các dịch vụ khác và một cho các hoạt động).một dịch vụ android có thể cung cấp hai giao diện để giao tiếp không?

Nhưng khi các hoạt động (sử dụng cùng một chất kết dính) unbind từ dịch vụ, tôi có lỗi "myService đã bị rò rỉ ServiceConnection ... ban đầu bị ràng buộc ở đây", mà tôi tin là về chất kết dính dịch vụ sử dụng giao tiếp với các dịch vụ khác.
Nếu một dịch vụ không thể sử dụng hai giao diện, làm thế nào tôi có thể thực hiện giao tiếp giữa các hoạt động và dịch vụ đó?

cảm ơn bạn, -Liron

Trả lời

0

AIDL và Messenger được sử dụng cho IPC với các ứng dụng khác/quy trình. Từ Android API Guide:

Note: Sử dụng AIDL là cần thiết chỉ nếu bạn cho phép khách hàng từ các ứng dụng khác nhau để truy cập dịch vụ của bạn cho IPC và muốn xử lý đa luồng trong dịch vụ của bạn. Nếu bạn không cần phải thực hiện đồng thời IPC trên các ứng dụng khác nhau, bạn nên tạo giao diện của mình bằng cách thực hiện một Binder hoặc, nếu bạn muốn thực hiện IPC, nhưng không cần phải xử lý đa luồng, thực hiện giao diện của bạn bằng cách sử dụng Messenger. Bất kể, hãy chắc chắn rằng bạn hiểu Dịch vụ ràng buộc trước khi triển khai AIDL.

Nếu hoạt động của bạn đang trong quá trình tương tự như dịch vụ, bạn chỉ cần mở rộng Chất kết dính.

Mở rộng lớp Binder

Nếu dịch vụ của bạn tới ứng dụng của riêng bạn và chạy trong quá trình tương tự như khách hàng (mà là phổ biến), bạn nên tạo giao diện của bạn bằng cách mở rộng Binder và trả về một thể hiện của nó từ onBind(). Khách hàng sẽ nhận được Binder và có thể sử dụng nó để trực tiếp truy cập các phương thức công khai có sẵn trong triển khai Binder hoặc thậm chí Dịch vụ. Đây là kỹ thuật ưa thích khi dịch vụ của bạn chỉ đơn thuần là nhân viên hỗ trợ cho ứng dụng của riêng bạn. Lý do duy nhất bạn không tạo giao diện của mình là cách là do dịch vụ của bạn được các ứng dụng khác sử dụng hoặc trên các quy trình riêng biệt.

đồ họa này liên quan đến vòng đời ràng buộc dịch vụ có thể giúp với cách bạn được ràng buộc/unbinding (http://developer.android.com/guide/components/bound-services.html#Lifecycle):

enter image description here