Tôi muốn chạy một số công việc (ví dụ: nhận trang tin tức trang web của tôi) định kỳ (mỗi tuần một lần/ngày), ngay cả khi ứng dụng của tôi bị đóng. Có thể không?Chạy tuần tự nhiệm vụ (mỗi ngày một lần/tuần một lần)
Trả lời
Có, bạn cần phải xem AlarmManager để thiết lập "Báo thức" lặp lại. Điều này là tốt hơn cho tuổi thọ pin trên thiết bị, như không giống như một dịch vụ nó không chạy liên tục trong nền. Báo thức kích hoạt broadcast receiver sẽ thực thi mã tùy chỉnh của bạn.
Lưu ý cuối cùng - có giá trị enum cho thời gian báo thức bao gồm hàng ngày, nửa ngày và nhiều hơn nữa mặc dù bạn chỉ có thể đặt giá trị thực.
Một ví dụ điển hình có thể được tìm thấy trong các sau SO bài:
Cập nhật
Mới hơn các tính năng đã được thêm vào Android. Nếu bạn đang đọc cái này thì tôi khuyên bạn nên xem xét GcmNetworkManager. Điều này tối ưu hóa tuổi thọ pin và hoạt động trước kẹo que. Đối với Lollipop trở đi, bạn có thể sử dụng JobScheduler. Tôi sẽ khuyên bạn nên sử dụng các lớp này trên AlarmManager.
Là một thay thế tôi đang so sánh tuần hiện tại:
Calendar cal = Calendar.getInstance();
int currentWeekOfYear = cal.get(Calendar.WEEK_OF_YEAR);
SharedPreferences sharedPreferences= this.getSharedPreferences("appInfo", 0);
int weekOfYear = sharedPreferences.getInt("weekOfYear", 0);
if(weekOfYear != currentWeekOfYear){
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putInt("weekOfYear", currentWeekOfYear);
editor.commit();
// Your once a week code here
}
tôi không ủng hộ này là tốt hơn so với các giải pháp báo động. Tôi chỉ cho thấy một cách tiếp cận khác.
Tôi nghĩ phù hợp nhất là GcmNetworkManager. Về cơ bản nó có mọi thứ bạn cần từ AlarmManager cộng với sự kiên trì, vì vậy công việc có thể tiến hành thực hiện sau khi khởi động lại.
Ví dụ:
PeriodicTask task = new PeriodicTask.Builder()
.setService(MyTaskService.class)
.setTag(TASK_TAG_PERIODIC)
.setPeriod(5L)
.build();
mGcmNetworkManager.schedule(task);
Bạn nói đúng - điều này có lẽ sẽ trở thành cách bình thường để làm điều này. Tôi đã viết câu trả lời của tôi cách đây 2,5 năm để mọi thứ tiếp tục. Tôi cho rằng bạn cần phải thêm về Trình lập lịch công việc Lollipop cho Android 5+ vì bạn KHÔNG phải sử dụng 'GcmNetworkManager'. Tôi upvoted btw. –
- 1. Android - tạo một dịch vụ chạy mỗi ngày một lần
- 2. Chạy một lần một ngày
- 3. Lập lịch nhiệm vụ chạy một lần, sử dụng không gian tên nhiệm vụ Spring
- 4. log4net một tệp cho mỗi lần chạy
- 5. Công việc Cron chạy cứ x tuần một lần và vào những ngày cụ thể
- 6. Mở rộng một lần hàng tuần vào ngày
- 7. Cần tây: mỗi giới hạn nhiệm vụ đồng thời (# công nhân cho mỗi nhiệm vụ)?
- 8. Chạy một nhiệm vụ sau khi tất cả các nhiệm vụ đã được hoàn thành
- 9. Làm thế nào để Ruby chạy một số nhiệm vụ sau mỗi 10 phút?
- 10. Tại sao một ScheduledExecutorService không chạy một nhiệm vụ một lần nữa sau khi một ngoại lệ được ném?
- 11. Cách đặt lệnh cron cho hai tuần một lần (hai lần một tuần)
- 12. Làm thế nào để thiết lập một nhiệm vụ CRON để chỉ chạy một lần cho mỗi tập hợp các trường hợp?
- 13. Task Scheduler 6 ngày một tuần
- 14. Hủy bỏ một nhiệm vụ chạy dài trong TPL
- 15. Tạm dừng nhiệm vụ chạy dài một cách an toàn
- 16. ContinueWith một hủy nhiệm vụ
- 17. Nhiệm vụ SQL hàng ngày để xóa nội dung từ một bảng
- 18. Chạy tập lệnh PHP một lần mỗi phút
- 19. ScheduledExecutorService một chủ đề nhiều nhiệm vụ
- 20. Buộc Eclipse tự động dọn sạch một dự án trước mỗi lần chạy
- 21. Làm thế nào để tự động thêm/xóa nhiệm vụ tuần hoàn để cần tây (celerybeat)
- 22. Kết hợp nhiều nhiệm vụ cào cào vào một nhiệm vụ
- 23. requestAccessToEntityType - một lần hoặc mỗi lần?
- 24. Tạo một nhiệm vụ với nhịp tim
- 25. thạch anh - việc làm lịch trình mỗi hai tuần trên một vài ngày trong tuần và thời gian
- 26. Làm thế nào để chạy trình bổ sung Scheduler tại Heroku một lần mỗi tháng?
- 27. ActiveRecord :: ConnectionNotEstablished trong một nhiệm vụ rake
- 28. Gọi một nhiệm vụ cho mỗi tập tin trong một fileset với kiến đồng bằng với tên tập tin như một tham số (không có nhiệm vụ contrib, không có nhiệm vụ riêng)
- 29. Chạy nhiệm vụ SBT từ Eclipse
- 30. Làm thế nào để định kỳ chạy một nhiệm vụ trong các emacs?
Cảm ơn, đây là chính xác những gì tôi đang tìm kiếm. – siemian
@Graham Smith Không quan tâm, bạn có viết của riêng mình không? –
@Graham Smith Liên kết bạn cung cấp bị hỏng. Bạn có thể cung cấp liên kết hoạt động không? – Zapnologica