2010-02-16 24 views
6

Tôi có một dịch vụ lắng nghe một ổ cắm. Khi nhận được đầu vào nhất định, đó là tạo một hoạt động. Khi nhận được đầu vào khác, nó là để giết hoạt động này. Tôi đã vật lộn trong một thời gian để làm cho dịch vụ liên lạc với hoạt động thông qua AIDL (http://developer.android.com/guide/developing/tools/aidl.html), nhưng điều này có vẻ không hiệu quả. Tôi nghĩ AIDL chỉ hiệu quả khi quá trình được nói đến là một dịch vụ, không phải khi nó là một hoạt động? Tôi rất thích một số hướng dẫn hoặc gợi ý về cách giải quyết vấn đề của mình.Cách tốt nhất cho Dịch vụ bắt đầu Hoạt động để liên lạc với nó

Chúc mừng,

Trả lời

9

Tôi có một dịch vụ mà lắng nghe một ổ cắm . Khi nhận được đầu vào nhất định , đó là tạo một hoạt động.

Vui lòng đặt cấu hình này. Dịch vụ không được bắt đầu hoạt động ngoại trừ trong rất trường hợp bất thường (ví dụ: ổ cắm là kết nối SIP và bạn đang tạo ứng dụng VOIP). Popping up một hoạt động ngắt người dùng trong bất cứ điều gì họ đang làm.

Khi nhận được thông tin nhập khác, nó là giết hoạt động này.

Kịch bản duy nhất tôi đã thấy đây là mẫu hợp lệ đang loại bỏ màn hình trong cuộc gọi khi bên kia treo lên dòng. Nếu bạn đang tạo một khách hàng VOIP, mẫu được đề xuất của bạn phải là OK, nhưng nếu không, vui lòng xem xét lại việc có hoạt động biến mất ở giữa người dùng đang sử dụng nó.

Tôi nghĩ AIDL chỉ hiệu quả khi quy trình được nói đến là một dịch vụ, không phải khi nó là một hoạt động?

Không, nó cũng hoạt động theo hướng ngược lại, nhưng thường chỉ khi hoạt động là dịch vụ bắt đầu dịch vụ và ràng buộc với dịch vụ đó. Quan trọng hơn, AIDL chỉ dành cho giao tiếp chéo.

Tôi rất thích một số hướng dẫn hoặc đề xuất về cách giải quyết sự cố của tôi.

Bạn chưa thực sự cung cấp đủ thông tin về bản chất của giao tiếp để cung cấp cho bạn câu trả lời kỹ lưỡng. Chính xác, dịch vụ đang cố gắng nói cho hoạt động này là gì? Hoạt động này cũng đang cố gắng giao tiếp với dịch vụ?

Mẫu được đề xuất để liên lạc liên tục từ một hoạt động với dịch vụ là sử dụng mẫu liên kết cục bộ. Bạn sẽ tìm thấy ví dụ về điều này trong các mẫu SDK của mình và bạn cũng có thể tìm thấy một mẫu here.

Dịch vụ sau đó có các tùy chọn để liên lạc lại với khách hàng: qua gọi lại (ví dụ: Handler trong câu trả lời do ông Smiljanić cung cấp) hoặc thông qua chương trình phát sóng Intents. Trong trường hợp gọi lại, hoạt động sẽ cần phải liên kết với dịch vụ để có quyền truy cập vào một API để cung cấp đối tượng gọi lại. Dịch vụ sau đó sẽ giữ đối tượng đó và gọi các phương thức trên nó trong các sự kiện quan trọng.

Nếu dịch vụ của bạn đang thực hiện công việc chính trên một chuỗi nền, bạn sẽ cần đảm bảo rằng các hoạt động giao diện người dùng của bạn được thực hiện trên chuỗi giao diện người dùng. Handler là một cách tiếp cận đó.

+0

Rất đẹp Mr. CommonsWare;) –

Các vấn đề liên quan