WorkManager - SMAXLYB/JetpackPractice GitHub Wiki

WorkManager

WorkManager能够保证后台任务一定被执行,但不是立即执行,针对的是不需要及时完成的任务。Android上的Doze、App Standby等限制了后台应用,不允许应用过分消耗设备电量,WorkManager可以在电量和用户体验之间达到一个比较好的平衡

  • 如何使用
  1. 添加依赖,新建任务类,继承自Worker(),复写方法doWork,返回Result的三个子类,再方法中进行耗时任务。
  2. 调用OneTimeWorkRequest.builder()或者PeriodicWorkRequest.builder(),最后build()新建任务
    • 设置约束条件,当条件满足时才会运行任务:Constrants.Builder().build(),然后调用setConstrants
    • 设置延迟执行:setInitialDelay()
    • 设置退避策略:setBackoffCriteria()
    • 设置标签:addTag()
    • 设置输入数据:setInputData(),在worker中可以使用getInputData()取出数据
  3. 提交任务:WorkManager.enqueue(),如果有多个任务需要并行,可以使用WorkManager.beginWith().then().then().enqueue()等
  4. 观察任务状态:WorkManager.getWorkInfoByxxx/LiveData(),任务状态发生变化时会自动回调
  5. 取消任务:WorkManager.cancelxxx()