Có cách nào để ngăn Dịch vụ của tôi tự động được khởi động lại bởi ActivityManager sau khi "treo" không? Trong một số tình huống, tôi buộc phải giết dịch vụ của mình khi thoát chương trình, nhưng không muốn Android tiếp tục khởi động lại nó.Android: Cách ngăn dịch vụ khởi động lại sau khi bị lỗi?
Trả lời
Dịch vụ của bạn có thể lưu trữ một giá trị trong SharedPreferences. Ví dụ bạn có thể lưu trữ một cái gì đó như thế này mỗi khi dịch vụ của bạn bắt đầu: cửa hàng ("serviceStarted", 1);
Khi dịch vụ của bạn chấm dứt quy định (bạn gửi tin nhắn để làm như vậy), bạn ghi đè giá trị này: lưu trữ ("serviceStarted", 0);
Khi lần sau dịch vụ của bạn tự khởi động lại, nó phát hiện giá trị serviceStarted là "1" - điều đó có nghĩa là dịch vụ của bạn không bị ngừng và sẽ tự khởi động lại. Khi bạn phát hiện dịch vụ này, dịch vụ của bạn có thể gọi: stopSelf(); để tự hủy.
Để biết thêm thông tin: http://developer.android.com/reference/android/app/Service.html#ServiceLifecycle
Hành vi này được xác định bởi giá trị trả về của onStartCommand()
trong việc thực hiện Service
của bạn. Hằng số START_NOT_STICKY
yêu cầu Android không khởi động lại dịch vụ nếu nó đang chạy trong khi quá trình này bị "giết". Nói cách khác:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// We don't want this service to continue running if it is explicitly
// stopped, so return not sticky.
return START_NOT_STICKY;
}
HTH
Mặc dù không được đánh dấu là giải pháp được chấp nhận, đây là câu trả lời đúng – scooterman
Nó sẽ không hoạt động nếu có ý định nổi bật. Tôi có vấn đề đó và cách tiếp cận trên không hoạt động. Cách tiếp cận dưới đây có thể là một lựa chọn tốt hơn nhưng tôi chưa thực hiện nó. Đã thử các cách tiếp cận khác được đề xuất trong ngăn xếp tràn nhưng chúng chưa thành công. –
@BrianReinhold vấn đề của bạn có vẻ như nó có một twist cụ thể về câu hỏi này, bạn đã đăng một trong những của riêng bạn giải thích trường hợp sử dụng của bạn và các vấn đề bạn đã quan sát? Tôi muốn được quan tâm để xem xét nó nhiều hơn nữa. – Devunwired
Đây là giải pháp tôi đã đưa ra trong trường hợp nó có thể giúp người khác. Ứng dụng của tôi vẫn khởi động lại ngay cả với START_NOT_STICKY
. Vì vậy, thay vào đó tôi kiểm tra xem mục đích là null
có nghĩa là dịch vụ đã được khởi động lại bởi hệ thống.
@Override
public int onStartCommand(@Nullable Intent intent, int flags, int startId) {
// Ideally, this method would simply return START_NOT_STICKY and the service wouldn't be
// restarted automatically. Unfortunately, this seems to not be the case as the log is filled
// with messages from BluetoothCommunicator and MainService after a crash when this method
// returns START_NOT_STICKY. The following does seem to work.
Log.v(LOG_TAG, "onStartCommand()");
if (intent == null) {
Log.w(LOG_TAG, "Service was stopped and automatically restarted by the system. Stopping self now.");
stopSelf();
}
return START_STICKY;
}
Cảm ơn! Tôi có yêu cầu tìm nạp các cập nhật vị trí thường xuyên và gửi nó đến máy chủ từ dịch vụ. thông báo dựa trên dịch vụ nền trước, nhưng nó ngừng nhận cập nhật vị trí, bất cứ khi nào ứng dụng đóng lại. Sau 2 ngày đấu tranh, tôi đã đến câu trả lời của bạn và chỉnh sửa mã của bạn trước khi 'stopSelf()', tôi cấu hình khởi động lại cùng một dịch vụ bằng cách sử dụng 'AlarmManager' sau chậm trễ nói 10 giây ngay bây giờ.Và, điều này làm việc rất tốt, bây giờ nhận được cập nhật vị trí từ dịch vụ liên tục. Cảm ơn rất nhiều! – manoj
- 1. Không gọi đến onStartCommand() sau khi khởi động lại dịch vụ bị lỗi trong Android 2.3
- 2. postgres, ubuntu cách khởi động lại dịch vụ khi khởi động? bị kẹt khi nhóm lại sau khi khởi động lại ví dụ
- 3. Cách khởi động lại dịch vụ?
- 4. Dịch vụ Windows sẽ không tự động khởi động sau khi khởi động lại
- 5. màn hình trống sau khi khởi động lại hoạt động của trình khởi chạy (giao dịch bị lỗi)
- 6. Làm thế nào để ngăn chặn "Lập kế hoạch khởi động lại dịch vụ bị rơi"?
- 7. dịch vụ android tự khởi động lại trên ứng dụng bị giết
- 8. Android: giữ cho hoạt động ngăn xếp công việc sau khi khởi động lại từ CHỦ
- 9. Cách chạy tác vụ khi dịch vụ windows khởi động?
- 10. Ưu tiên lập lịch khởi động lại dịch vụ Android bị rơi
- 11. Dịch vụ khởi động NFC Android
- 12. Cách khởi động dịch vụ khi Thiết bị Android được bật?
- 13. "Lập kế hoạch khởi động lại dịch vụ bị lỗi", nhưng không có lệnh gọi tới onStart() theo sau
- 14. Khởi động Dịch vụ khi khởi động nhưng không phải toàn bộ ứng dụng Android
- 15. cách ngăn dịch vụ chạy lại nếu đã chạy android
- 16. Dịch vụ không nhận được tin nhắn sau khi dịch vụ Xếp hàng Tin nhắn khởi động lại
- 17. NDK của Android: Cách xóa mã gốc sau khi khởi động lại hoạt động?
- 18. Android-ẩn thanh tác vụ trong khi khởi động và sau đó hiển thị lại nó?
- 19. "Không thể bắt đầu dịch vụ Ý định" lỗi khi khởi chạy dịch vụ từ một hoạt động trong Android
- 20. Cách khởi động lại dịch vụ bằng lệnh nhắc?
- 21. Cách khởi động lại dịch vụ từ xa?
- 22. Khởi động lại ứng dụng Android sau khi quá trình bị giết
- 23. Thiết bị Android khởi động lại thỉnh thoảng
- 24. Cơ chế khởi động lại dịch vụ trong đầu bếp
- 25. "Đã hết thời gian chờ trong khi chờ dịch vụ kết nối" sau khi khởi động lại
- 26. Android: Khởi động dịch vụ lúc khởi động, nhưng không khởi chạy GUI
- 27. Cách tạo dịch vụ khởi động lại khi gặp sự cố
- 28. Khởi động lại dịch vụ với các dịch vụ phụ thuộc?
- 29. Sự khác biệt giữa, tải lại dịch vụ và khởi động lại dịch vụ là gì?
- 30. Dịch vụ Windows sẽ không khởi động (Lỗi 1053)
Hiển thị việc triển khai bộ xương của dịch vụ. –
Đây có phải là Dịch vụ thông thường hoặc IntentService không? –