2010-07-19 39 views
5

Tôi có Dịch vụ nền phải chạy vĩnh viễn. Dịch vụ chỉ cần tương tác với Hoạt động của tôi.Dịch vụ địa phương hoặc dịch vụ từ xa?

  1. Làm thế nào để tôi kiểm tra hoạt động tiếp tục nếu dịch vụ vẫn đang chạy? Có một khả năng tốt hơn so với một biến tĩnh trong lớp dịch vụ?

  2. Có lợi thế khi sử dụng dịch vụ từ xa trong một quy trình riêng biệt (để kéo dài thời gian sử dụng dịch vụ) để khi quá trình hoạt động bị hủy dịch vụ vẫn còn hoạt động?

+0

´báo cáo lỗi 'nói với tôi rằng dịch vụ của tôi bị hỏng quá nhiều và đã bị phá hủy – OneWorld

Trả lời

7

Tôi có một dịch vụ nền mà phải chạy vĩnh viễn.

This is not possible. Người dùng hoặc Android sẽ giết dịch vụ của bạn tại một số thời điểm. Vui lòng xem xét lại kiến ​​trúc của bạn.

Làm thế nào để tôi kiểm tra hoạt động tiếp tục nếu dịch vụ vẫn đang chạy?

Nói chung, bạn thì không.

Có khả năng nào tốt hơn biến tĩnh trong lớp dịch vụ không?

Điều đó sẽ không hoạt động nếu người dùng hoặc Android giết dịch vụ của bạn.

Có lợi thế sử dụng một dịch vụ từ xa trong một quá trình riêng biệt (để kéo dài thời gian tuổi thọ) để khi quá trình hoạt động bị giết dịch vụ vẫn còn sống?

Dịch vụ từ xa không liên quan đến việc dịch vụ có chạy sau khi các hoạt động bị hủy hay không. Nếu bạn gọi startService(), dịch vụ này sẽ chạy, không phụ thuộc vào bất kỳ hoạt động, cho đến khi:

  • bạn gọi stopService() từ một hoạt động
  • dịch vụ gọi stopSelf()
  • Android chấm dứt dịch vụ
  • người dùng chấm dứt dịch vụ thông qua ứng dụng Cài đặt
  • người dùng chấm dứt dịch vụ thông qua "kẻ giết người nhiệm vụ" (Android 2.1 trở về trước, ít nhất)
+0

và những gì người dùng muốn thông báo cho hoạt động xuất hiện lại nếu dịch vụ nền vẫn đang thực hiện công việc của mình? – Sney

+0

@Snej: Tôi không hiểu câu hỏi của bạn, xin lỗi. – CommonsWare

+0

Xin lỗi, bình luận cuối cùng của tôi hơi rối tung một chút cho đến khi tôi nhận ra nó. Câu hỏi đặt ra là làm cách nào để xác định thời điểm người dùng khởi chạy lại ứng dụng cho dù dịch vụ nền vẫn đang chạy hay đã bị giết. Bởi câu trả lời của Macarse một Intent có thể được ném vào dịch vụ. Nhưng làm cách nào để tôi có thể tìm hiểu xem dịch vụ đã được khởi động lại hay vẫn đang chạy? – Sney

3

Tại sao bạn muốn biết liệu Dịch vụ có đang chạy không? Nếu bạn cần một cái gì đó từ nó, chỉ cần ném một Intent và nếu nó không chạy nó sẽ bắt đầu bằng ý định.

Liên quan đến câu hỏi thứ hai:

Dịch vụ của bạn sẽ không "chết" khi Hoạt động của bạn đóng.

+1

Tôi muốn biết điều đó vì ứng dụng đang ghi dữ liệu gps và điều quan trọng là phải đăng nhập vĩnh viễn. Vì vậy, tôi muốn cho người dùng biết thông qua các hoạt động nếu nó ngừng đăng nhập vì một ngoại lệ hoặc dịch vụ bị giết. – Sney

+0

Tôi có cùng mối quan tâm với Snej. – gregm

+1

@Sney: Đây là một hack, nhưng bạn có thể thử gửi 'Broadcasts' từ dịch vụ để cho mọi người biết bạn còn sống. – Macarse

3

Khởi động dịch vụ ở startforeground(). Nó sẽ tăng thời gian của dịch vụ.

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