2010-03-30 3 views
7

Tôi đang phát triển ứng dụng kiểm tra một số điều kiện trong khi gọi điện thoại đến. Các phần chính của ứng dụng là một BroadcastReceiver nghe Intents liên quan đến tình trạng của điện thoại và một dịch vụ địa phương kiểm tra các điều kiện.Android: Bắt đầu và dừng dịch vụ có tốt hơn không khi nào cần thiết hoặc để cho một dịch vụ chạy và liên kết với và unbind tạo nó?

Tại thời điểm dịch vụ được khởi động mỗi khi cuộc gọi đến được phát hiện và dừng lại khi trạng thái điện thoại được chuyển về chế độ chờ.

Bây giờ tôi tự hỏi liệu quy trình này có chính xác hay không và liệu việc khởi động và dừng dịch vụ có liên quan đến trạng thái của điện thoại là hợp lý hay không. Hoặc nó sẽ là tốt hơn để cho các dịch vụ chạy bất kể tình trạng của điện thoại và ràng buộc/unbind đến/từ nó khi cần thiết.

Có bất kỳ vấn đề về hiệu suất nào mà tôi phải suy nghĩ không? Có lẽ nó đắt hơn để bắt đầu/dừng một dịch vụ hơn là để nó chạy và giao tiếp với nó. Có bất kỳ phương pháp hay nhất nào liên quan đến việc triển khai dịch vụ không?

Trả lời

5

Hoặc nó sẽ được tốt hơn để cho các dịch vụ chạy bất kể tình trạng của điện thoại và bind/unbind đến/từ nó khi cần thiết.

Xin đừng. Nó sẽ chỉ mất RAM không có lý do chính đáng. Đó là các dịch vụ vĩnh cửu như thế này khiến người dùng tấn công các nhà phát triển bằng các kẻ giết nhiệm vụ.

Có bất kỳ phương pháp hay nhất nào ngoài đó về việc triển khai các dịch vụ không?

Heretwo bài đăng của tôi về chủ đề này, cho những gì chúng đáng giá.

+0

Ngoài ra: khi một 'Hoạt động' liên kết với' Dịch vụ', 'Dịch vụ' tồn tại miễn là có liên kết với nó. Khi 'Hoạt động' cuối cùng không kết thúc' Service' finishes(). – MrSnowflake

+1

Giả định đó là mẫu liên kết/không liên kết, không hoạt động với 'BroadcastReceiver'. Một BroadcastReceiver' cần phải sử dụng start/stop - nó không thể liên kết (không nói một mình unbind). Do đó, tôi đã giả định OP có nghĩa là để bắt đầu dịch vụ và rời khỏi dịch vụ đang chạy. – CommonsWare

+0

Trong các liên kết được cung cấp, bạn tuyên bố "Tôi khuyến khích các nhà phát triển Android cố gắng tránh các dịch vụ chạy dài bất cứ khi nào có thể". Vì vậy, tôi giả sử có những trường hợp dịch vụ chạy dài thích hợp hơn. Tôi có một ổ cắm Bluetooth mà tôi không muốn đóng khi nó đang mở (bất kể ứng dụng chính thực sự đang chạy hay không). Nhưng tôi là một ứng dụng kiểu kiosk và nó luôn bật và đang sạc (tiêu thụ điện năng là không quan tâm trong trường hợp này). – Logic1