2011-08-17 33 views
6

Ngay bây giờ Hoạt động chính (Đạo luật A) bắt đầu một Dịch vụ giữ kết nối Bluetooth. (Nó liên kết Dịch vụ)Cách triển khai tốt nhất Hai hoạt động chia sẻ một dịch vụ (kết nối Bluetooth)?

Dịch vụ là một phiên bản sửa đổi của BluetoothChatService (Android BluetoothChat mẫu) ... ... sửa đổi với một thêm Messenger và Handler theo MessengerService (Android messenger mẫu từ xa)

Hoạt động A đảm bảo rằng Bluetooth được kết nối với một thiết bị bên ngoài và sau đó bắt đầu một hoạt động khác (Đạo luật B).

Sự cố là để Dịch vụ tiếp tục chạy và phân phối Kết nối Bluetooth với hoạt động mới suôn sẻ. Tôi không biết làm thế nào để:

  • Hãy chắc chắn rằng dịch vụ này không được khởi động lại hoặc reinstanced, khi nó chuyển từ hoạt động A đến B

  • Hãy chắc chắn rằng các chức năng tin nhắn nhanh hoạt động như mong muốn (từ các hoạt động đang hoạt động)

tôi có cần phải rebind Dịch vụ cho hoạt động mới, và làm thế nào để đảm bảo rằng kết nối BT không bị mất (do dụ khác of Service)? Hoặc tôi có cần phải truyền dọc đối tượng Messenger đến hoạt động mới để giao tiếp với Dịch vụ instantiated đã đọc hay không. Nếu vậy, làm thế nào để tôi làm điều đó tốt nhất?

Rất biết ơn câu trả lời!

Trả lời

1

Bạn có thể subclass Application và lưu trữ thông tin trong đó (xem here), hoặc bạn có thể làm cho bạn "dịch vụ" một singleton, vì vậy nó có một thành viên tĩnh của kiểu riêng của mình mà bạn khởi tạo chỉ khi nó là null.

6

Làm cho dịch vụ "dính" để nó tiếp tục chạy. Và tạo một lớp Hoạt động cơ bản cho 2 hoạt động của bạn. Lớp Activity cơ bản có thể xử lý tất cả các chức năng phổ biến của ràng buộc với dịch vụ và cung cấp thông tin liên lạc thích hợp. Tôi chắc chắn sẽ khuyên bạn nên unbinding dịch vụ của bạn khi các hoạt động tạm dừng và lại ràng buộc chúng trong các hoạt động khi họ tiếp tục. Nhưng điều này có thể được thực hiện một lần trong hoạt động lớp cơ sở chung.

Việc kết nối với dịch vụ chỉ nên khởi động nếu nó chưa được chạy và nếu bạn liên kết/hủy liên kết trong Tiếp tục/Tạm dừng, bạn chỉ nên có một kết nối hoạt động với dịch vụ tại bất kỳ thời điểm nào.

1

Đây là một câu hỏi cũ, nhưng tôi đã vượt qua tình huống này ngày hôm nay và đưa ra giải pháp hoạt động dựa trên các phản hồi khác. Vì tôi không thể tìm thấy việc triển khai hoạt động, tôi sẽ đăng nó lên cho những người có thể tò mò. Tôi đã tạo một "dịch vụ dính" và sau đó là một lớp ServiceManager chịu trách nhiệm quản lý vòng đời và ràng buộc cho Dịch vụ. Sau đó, tôi đặt lớp ServiceManager vào một lớp con của Ứng dụng để các Hoạt động có thể truy cập nó dưới dạng một phạm vi toàn cầu. Nó hoạt động tốt. Nguồn có sẵn trên GitHub.

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