android alarmmanager 后台收不到_Android-Jetpack笔记-WorkManager

WorkManager能帮我们更好的管理后台任务,可以更好地管理执行时机、执行顺序和执行状态(有无网络、是否在充电)。他会根据系统版本选择合适的方案执行任务,比如在API 23及以上使用JobScheduler,以下则使用BroadcastReceiverAlarmManager,能兼容到API 14。同时,他会将任务存储进数据库来保证关机重启后任务仍可执行(这点有待验证,因为国内机型太多了)。

Jetpack笔记代码

本文源码基于SDK 29

使用

引入依赖:

 def work_versions = "2.3.4"
 implementation "androidx.work:work-runtime:$work_versions"

新建任务继承Worker

 class MyWorker extends Worker {
     @Override
     public Result doWork() {
         QrLog.e(getTags() + " doWork = " + getInputData().getString("input_data") + "," + Thread.currentThread());
         return Result.success();
     }
 }

在activity中使用,

 class WorkManagerActivity extends AppCompatActivity {
     void onCreate(Bundle savedInstanceState) {
          //创建要传递的参数,最大10KB
         Data inputData = new Data.Builder().putString("input_data", "输入数据").build();
 ​
         //创建约束条件
         Constraints constraints = new Constraints.Builder()
             .setRequiresCharging(true) //充电状态
             .setRequiredNetworkType(NetworkType.CONNECTED)  //网络连接
             .setRequiresBatteryNotLow(true)  //非低电量
             .build();
 ​
         //创建一次性请求
         OneTimeWorkRequest workRequest = new OneTimeWorkRequest.Builder(MyWorker.class)
                 .setConstraints(constraints)  //设置约束条件
                 .setInitialDelay(2, TimeUnit.SECONDS)  //延迟2秒执行
                 .addTag("MyWorker")  //设置标签
                 .setInputData(inputData)   //设置输入数据
                 .build();
         //还有周期性请求PeriodicWorkRequest,需要注意的是内部限制了最小周期为15分钟
 ​
         //执行任务,可链式调用,workRequest2执行完了才执行workRequest
         WorkManager.getInstance(this).beginWith(workRequest2).then(workRequest).enqueue();
 ​
         //可以监听任务的工作状态
         LiveData<List<WorkInfo>> liveData = WorkManager.getInstance(this).getWorkInfosByTagLiveData("MyWorker");
         liveData.observe(this, new Observer<List<WorkInfo>>() {
             @Override
             public void onChanged(List<WorkInfo> workInfos) {
                 //do something
             }
         });
     }
 }

运行即可。

原理

暂不分析源码,引用掘金-[译] 从Service到WorkManager的一张流程图。

934e5740f5d9fa030bb37120345388a9.png

优缺点

  • 优点:
    • 使用方便,内部会根据不同系统选择合适方案
    • 能链式调度,让各任务按指定顺序执行
    • 能配置各种执行状态,如有无网络、是否在充电
    • 任务被存储进数据库,关机仍可执行(待验证)
  • 缺点:
    • 还没发现

参考

  • 知乎-WorkManager的基本使用
  • B站-Android Jetpack WorkManager | Android 中文教学视频
  • 掘金-[译] 从Service到WorkManager

06e21633d47a551809e2ead772d44f26.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值