2012-02-01 26 views
8

Tôi tương đối mới đối với Android, vì vậy những gì tôi yêu cầu có vẻ hiển nhiên (mặc dù tôi đã đọc tất cả các câu hỏi có tiêu đề tương tự và đã tìm kiếm rộng rãi). Tôi cần theo dõi gia tốc liên tục trong thời gian dài. Hai phương pháp đã được đề xuất:Android: Dịch vụ trên mặt đất so với wakeLock

1) lấy khóa đánh thức một phần được giữ trong toàn bộ thời gian máy gia tốc đang được theo dõi; và

2) theo dõi gia tốc kế trong dịch vụ nền trước.

Cách tiếp cận đầu tiên dường như sử dụng rất nhiều thời lượng pin. Cách tiếp cận thứ hai sẽ dẫn đến một dịch vụ mà chỉ bị giết hiếm khi, nhưng tôi không chắc chắn những gì "hiếm khi" có nghĩa là. Phương pháp nào nên được sử dụng, và có những lựa chọn thay thế mà tôi nên xem xét?

+0

Hey Doug, bạn lấy thông tin đó ở đâu? – Bush

+0

Nếu vẫn quan tâm, hãy thử cách tiếp cận của trình quản lý báo thức: http://stackoverflow.com/questions/15451347/android-design-background-long-running-service-or-alarmmanager –

Trả lời

5

Cầm WakeLock và tiền cảnh Service không thực sự liên quan và không được so sánh theo hướng nào là tốt nhất.

Hệ điều hành Android được xây dựng để trao đổi các quy trình dựa trên nhiều yếu tố khác nhau. Điều này có nghĩa là quá trình của bạn có thể bị Android giết bất kỳ lúc nào và nó cung cấp một khung để giúp bạn, nhà phát triển, để đảm bảo ứng dụng của bạn có thể lưu và khôi phục trạng thái của nó khi điều này xảy ra.

A WakeLock chỉ đơn giản là ngăn CPU ngủ giúp tiết kiệm pin khi điện thoại không được sử dụng.

Giờ đây, kết hợp cả hai sẽ giúp bạn đạt được những gì bạn muốn nhưng với chi phí người dùng tuyệt vời. Tôi sẽ không muốn một ứng dụng trong điện thoại của tôi để giữ cho CPU liên tục chạy hoặc một biểu tượng thông báo để hiển thị liên tục trong thanh thông báo (đó là những gì một dịch vụ nền trước).

Hãy nhớ rằng, bắt đầu một dịch vụ ở chế độ nền trước không đảm bảo ứng dụng của bạn sẽ không bị giết. Nó vẫn có thể xảy ra mặc dù hiếm khi.

Bạn đang cố gắng đạt được điều gì ở đây? Tại sao phải theo dõi các thiết bị gia tốc kế? Có lẽ bạn chỉ nên theo dõi nó khi một Activity của ứng dụng của bạn ở phía trước thay thế.

+2

Tất cả các dịch vụ nền trước đều giữ khóa thức. Ví dụ: ứng dụng âm nhạc giữ khóa wake.Is một phần này là trường hợp với tất cả các dịch vụ tiền cảnh là tốt? – Basher51

1

Tôi đã có chính xác nhu cầu và vấn đề tương tự. Tôi tin rằng giải pháp là sử dụng cả khóa đánh thức một phần và dịch vụ nền trước. Android sẽ cố gắng không để giết một dịch vụ nền mà giữ một khóa thức tỉnh nhưng là miễn phí để giết nó khi nó cần các nguồn lực và có thể khởi động lại nó sau này. Đó là tốt cho rất nhiều mục đích nhưng ít nhất trong trường hợp của tôi là không đủ tốt. Đưa một dịch vụ vào trạng thái tiền cảnh là cách nói với Android rằng việc giết nó là không thể chấp nhận được. Có, nó vẫn có thể xảy ra trong những tình huống cực đoan nhưng bây giờ sẽ là một sự vi phạm hợp đồng API trong khi với một dịch vụ nền Android miễn phí để giết nó. Do đó, bạn nên mã hóa như thể điều đó sẽ không bao giờ xảy ra nhưng chỉ biết rằng đây là một lỗi có thể nhưng có thể hiếm gặp.

+0

Thực hiện tất cả các dịch vụ tiền cảnh có khóa chế độ thức.Đối với ví dụ, các ứng dụng nhạc giữ khóa đánh thức một phần. Đây có phải là trường hợp với tất cả các dịch vụ tiền cảnh không? – Basher51

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