2012-02-07 18 views
5

Bằng cách sử dụng START_STICKY, nếu dịch vụ của tôi bị lỗi/bị giết bởi trình quản lý tác vụ, nó sẽ tự động khởi động lại. Tôi thấy rằng có một danh sách các dịch vụ được khởi động lại nhưng theo một thứ tự khác. Tôi muốn ưu tiên việc khởi động lại dịch vụ này để dịch vụ sẽ bắt đầu sớm hơn bằng cách đặt vào mặt trước của hàng đợi.Ưu tiên lập lịch khởi động lại dịch vụ Android bị rơi

Thường mất 15 giây đến 45 giây để khởi động lại dịch vụ. Có cách nào để ưu tiên hoặc bắt đầu dịch vụ này sớm hơn cách khác hay không.

Trả lời

0

Dịch vụ của bạn có hoạt động lâu dài không? Nếu có, hãy cố gắng loại bỏ nó và chỉ bắt đầu nó khi cần thiết. Các dịch vụ Android không có nghĩa là chạy như một daemon, chúng có nghĩa là chạy như các công nhân sống ngắn trong nền khi không cần tương tác và giao diện người dùng.

Hầu hết các dịch vụ "Tôi chỉ ngồi xung quanh" có thể nghe ý định phát sóng và trở thành công dân tốt đẹp theo cách này.

Một điều khác: Nếu dịch vụ của bạn đã chạy ngắn và kẻ giết người nhiệm vụ đang hoạt động, thật dễ dàng: Đó là vấn đề của người dùng chứ không phải lỗi của bạn. Hệ thống không cần những kẻ giết nhiệm vụ và bạn không nên chăm sóc chúng. Người dùng nên biết rằng việc sử dụng chúng không lành mạnh.

+0

Mỏ là "Một thứ khác". Tôi tin rằng tôi nên thêm một tin nhắn để thêm ứng dụng của tôi vào danh sách bỏ qua Task Manager. – dcanh121

0

Tôi đoán giải pháp này hơi bẩn nhưng bạn có thể sử dụng Dịch vụ mới bắt đầu bằng START_STICKY và đặt tất cả các dịch vụ khác thành START_NOT_STICKY.

Sau đó, bạn có thể sử dụng dịch vụ mới để bắt đầu tất cả các dịch vụ khác (mặc dù điều này không nhất thiết cần thiết). Đây thực sự là một triển khai dễ dàng, vì bạn có thể chuyển toàn bộ ý định đến dịch vụ sẽ được bắt đầu.

Sau đó, bạn có thể thêm một Broadcast trên tất cả dịch vụ OnDestroy() để thông báo cho dịch vụ mới, rằng một trong những dịch vụ cũ đã bị hệ thống giết. Bạn cũng có thể truyền ý định khởi động cũ qua OnDestroy(), vì vậy nó được khởi động lại.

Trong trường hợp dịch vụ mới của bạn bị giết, bạn có thể kiểm tra sau khi khởi động lại nếu có bất kỳ dịch vụ nào khác bị giết, và sau đó ưu tiên khởi động lại.