前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android-Jetpack笔记-WorkManager

Android-Jetpack笔记-WorkManager

作者头像
Holiday
发布2020-08-10 14:56:13
9620
发布2020-08-10 14:56:13
举报
文章被收录于专栏:哈利迪ei哈利迪ei

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

Jetpack笔记代码

本文源码基于SDK 29

使用

引入依赖:

代码语言:javascript
复制
def work_versions = "2.3.4"
implementation "androidx.work:work-runtime:$work_versions"

新建任务继承Worker

代码语言:javascript
复制
class MyWorker extends Worker {
    @Override
    public Result doWork() {
        QrLog.e(getTags() + " doWork = " + getInputData().getString("input_data") + "," + Thread.currentThread());
        return Result.success();
    }
}

在activity中使用,

代码语言:javascript
复制
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的一张流程图。

优缺点

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

参考

  • 知乎-WorkManager的基本使用
  • B站-Android Jetpack WorkManager | Android 中文教学视频
  • 掘金-[译] 从Service到WorkManager
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 哈利迪ei 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用
  • 原理
  • 优缺点
  • 参考
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档