Scheduling of tasks vớithe Android JobScheduler

1.Giới thiệu Scheduling tasks

1.1. Bối cảnh

Nếu bạn có một công việc cần hẹn giờ hoạt động ở 1 thời điểm trong tương lai, Nó hoạt động mặc dù ứng dụng của bạn hiện không được sử dụng như báo thức,... Hệ thống android hiện tại cung cấp cho chúng ta 2 cách để làm điều này là:

  • AlarmManager
  • JobScheduler

AlarmManager là một ứng cử viên tuyệt vời cho lập kế hoạch nếu một ứng dụng cần thực hiện một sự kiện local vào thời điểm chính xác hoặc khoảng thời gian không chính xác. Tuy nhiên, các tài liệu không khuyến khích sử dụng AlarmManager cho các nhiệm vụ liên quan đến network. Chúng ta hãy xem xét một số lựa chọn tốt hơn cho networking Job Scheduler.

1.2. Job Scheduler

Android 5.0 Lollipop (API 21) giới thiệu một Job Scheduler. API này cho phép công việc hàng loạt khi các thiết bị này có nhiều nguồn lực sẵn có. Nói chung API này có thể được dùng để sắp xếp tất cả mọi thứ mà không phải là thời điểm quan trọng cho người sử dụng.

So sánh với AlarmManager, JobScheduler hỗ trợ xử lý đồng thời nhiều job điều mà Almarmanager chỉ hỗ trợ 1 job và làm cho ứng dụng ít tốn pin hơn. Job Scheduler vẫn hoạt động khi device khởi động lại (điều này với AlarmManager thì cần phải làm thêm lắng nghe mỗi khi device khởi động để start lại).

Bạn sử dụng Job Schedule trong những điệu kiện cụ thể mà AlarmManager không hỗ trợ như:

  • Device sạc pin hay không

  • Device kết nối unmetered network hay wifi

  • Device đang chế độ nghỉ hay không

  • Bắt đầu trước một thời hạn nhất định

  • Bắt đầu trong một cửa sổ thời gian được xác định trước, ví dụ, trong giờ tiếp theo

  • Bắt đầu sau khi một sự chậm trễ tối thiểu, ví dụ, chờ tối thiểu là 10 phút

2. Áp dụng Job Schedule

Chúng ta cần tạo 1 class extends từ JobSchedule để thực thi và implement 2 phương thức onStartJobonStopJob

  • onStartJob() là nơi đặt logic công việc cần làm, return false nếu tiến trình có thể chạy trên main thread, true nếu cần chia ra làm nhiều tiến trình khác nhau.
  • Khi hoàn thành công việc chúng ta cần gọi method jobFinished (JobParameters params, boolean needsReschedule) để xác định job đã hoàn thành và xác định thêm có hay không reschedule job
  • onStopJob () sẽ được gọi để ngăn chặn hoặc dọn dẹp khi chúng ta cacel hoặc thông số JobInfo ban đầu không còn được thỏa mãn, chẳng hạn như một người sử dụng rút thiết bị của họ nếu tham số ban đầu đó yêu cầu là chỉ chạy khi đang sạc pin.

3. Demo

Mời các bạn xem source của mình để có thể hiểu rõ hơn những điều chỉ là lý thuyết.

SourceCode

4. Kết luận

JobScheduler cung cấp một API làm việc hiện quả với những công việc đặt lịch, nhưng chỉ chạy API ở mức 21 hoặc cao hơn (hiện tại chỉ có khoảng 40.5% người sử dụng tại thời điểm viết bài này).