ứng dụng của tôi sử dụng mô hình cổ điển này để sắp xếp công việc định kỳ:Tôi nên di chuyển ứng dụng của mình để sử dụng JobScheduler như thế nào?
- Đặt chuông báo thức chính xác qua
AlarmManager
(thông quasetExactAndAllowWhileIdle()
, vì nó có để đi tắt ngay cả trong Nữu Thừa) - Bắt đầu một
IntentService
từonReceive()
quaWakefulBroadcastReceiver.startWakefulService()
- Thực hiện công việc trong
onHandleIntent()
và gọiWakefulBroadcastReceiver.completeWakefulIntent()
khi hoàn tất.
Hôm nay tôi cập nhật các targetSdkVersion đến 26 và phải đối mặt với một thực tế khủng khiếp mà WakefulBroadcastReceiver
bị phản.
tôi đã đi để đọc tài liệu API ngay lập tức và tìm thấy những điều sau đây:
Tính đến Android O, hạn chế kiểm tra lý lịch làm cho lớp này không còn thường hữu ích. (Nói chung không an toàn khi bắt đầu một dịch vụ từ khi nhận được một phát sóng, bởi vì bạn không có bất kỳ đảm bảo nào rằng ứng dụng của bạn đang ở nền trước tại thời điểm này và do đó được phép làm như vậy.) Thay vào đó, nhà phát triển nên sử dụng
android.app.job.JobScheduler
để lập lịch công việc và điều này không yêu cầu ứng dụng giữ khóa chế độ trong khi làm như vậy (hệ thống sẽ đảm nhiệm việc giữ khóa đánh thức cho công việc).
Điều này gây nhầm lẫn cho tôi, tôi thực sự không hiểu mục đích của AlarmManager.setExactAndAllowWhileIdle()
là gì mà không thể giữ thiết bị luôn tỉnh táo nữa.
Như tôi thấy tôi không thể đặt thời gian chính xác để chạy công việc với JobScheduler
, chỉ điều kiện (chẳng hạn như loại mạng hoặc trạng thái sạc) nên tôi không biết phải làm gì ở đây.
Tôi nghĩ một trong hai
Sử dụng
AlarmManager
vàJobScheduler
cùngCài âm báo (với
setExactAndAllowWhileIdle()
) và bắt đầu một công việc (thông quaJobScheduler
) ngay lập tức từonReceive()
. VìJobScheduler
cung cấpWakeLock
,WakefulBroadcastReceiver
là không cần thiết.(make này có ý nghĩa?)
hoặc
- tiếp tục sử dụng
WakefulBroadcastReceiver
dù đã được tán thành.
Tôi thực sự đánh giá cao bất kỳ lời khuyên nào về vấn đề này.
đã bạn tìm thấy câu trả lời nay ??? –