Android WorkManager使用记录

该文介绍了如何在Android中使用WorkManager库来执行后台任务。具体步骤包括导入依赖、定义Worker类、设定任务执行条件(如网络状态)以及创建单次和周期性的任务,并通过WorkManager实例将任务加入队列。同时,文章提到了周期性任务的最小间隔时间限制为15分钟。
摘要由CSDN通过智能技术生成

1、导入包:

implementation "androidx.work:work-runtime:2.7.1"

2、定义Worker:

class LogWork(context: Context, workerParams: WorkerParameters) : Worker(context, workerParams) {
    override fun doWork(): Result {
        //任务的具体行为
        Log.i("caowj", "Work doWork...${TimeUtils.getNowString()}")
        return Result.success();
    }
}

3、执行Worker:

    fun startLogWork(compatActivity: AppCompatActivity) {
        Log.d("caowj","startLogWork...")
        //定义触发条件
        val constraints: Constraints = Constraints.Builder() //NetworkType.NOT REQUIRED: 对网络没有要求
            //NetworkType.CONNECTED: 网络连接的时候执行
            //NetworkType.UNMETERED:环计费的网络比如WIFI下执行
            //NetworkType.NOT ROAMING:非漫游网络状态执行
            //NetworkType.METERED: 计费网络比如3G,4G下执行
            .setRequiredNetworkType(NetworkType.NOT_REQUIRED)
            .build()

//        // 单次任务
//        val logRequest = OneTimeWorkRequest.Builder(LogWork::class.java)
//            .setConstraints(constraints) //设置触发条件
//            .setInitialDelay(5, TimeUnit.SECONDS)   //设置延迟执行
//            .addTag("logRequest")    //设置tag标签
            .setBackoffCriteria(BackoffPolicy.LINEAR, java.time.Duration.ofSeconds(12)) //设置退避策略
//            .build()

        // 周期性任务(注意:可以定义的间隔时间最短不得少于15分钟。)
        val logRequest = PeriodicWorkRequest.Builder(LogWork::class.java, 15, TimeUnit.MINUTES)
            .setConstraints(constraints) //设置触发条件
            .setInitialDelay(5, TimeUnit.SECONDS)   //设置延迟执行
            .addTag("logRequest")    //设置tag标签
//            .setBackoffCriteria(BackoffPolicy.LINEAR, java.time.Duration.ofSeconds(12)) //设置退避策略
            .build()

        //将任务请求加入队列
        val workManager = WorkManager.getInstance(compatActivity)
        workManager.enqueue(logRequest)

        workManager.getWorkInfoByIdLiveData(logRequest.id).observe(compatActivity, Observer {
            Log.d("caowj", "work监听:$it")
        })
    }

注意:周期性任务(PeriodicWorkRequest)可以定义的间隔时间最短不得少于15分钟

4、参考:

(官方)使用 WorkManager 调度任务

https://blog.csdn.net/fjnu_se/article/details/128179736

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值