敞开成长之旅!这是我参加「日新方案 2 月更文挑战」的第 20 天,点击检查活动详情

前语

今日就想看看Jetpack,不想看Material,所以咱们看看WorkManager组件的运用办法。

正文

首要咱们先把WorkManager组件所需的依靠添加好,在app/build.gradle文件中添加下面依靠:

dependencies {
    ...
    implementation 'androidx.work:work-runtime:2.8.0'
   ...
}

然后咱们sync gradle,在同步等候的时候,咱们先了解一下WorkManager组件是干嘛的。

WorkManager概述

WorkManager首要是用来处理后台使命的,安卓的后台权限现在越来越紧,咱们之前的安卓版别也有许多处理后台使命的都不能很好的兼容,总归现在后台使命没那么厉害了,限制许多,开发者要自己去挑选组件兼容太费事。

而WorkManager组件便是Google推出的很适用于处理一些要求守时履行的使命,而且能够自动根据操作体系版别来运用相关完成方式来兼容,对咱们开发者来说很友爱,此外,它还能支撑周期性使命处理、链式使命处理等功能,是很强大的东西。

WorkManager组件与安卓体系四大组件之一的Service不太相同,Service会在没有被毁掉的情况下一向保持在后台运转,而WorkManager作为处理守时使命的东西,能够确保即使在应用推出乃至手机重启的情况下,之前注册的使命仍然能够履行,所以咱们的WorkManager组件也很适合用于履行一些定期和服务器进行交互的使命,如周期性同步数据之类的。

但需要留意的是,前面也说明了,现在安卓的后台限制很大,所以WorkManager也不能确保注册的周期性使命能够按时履行,这是体系的缘故,出于省电考虑,可能几个触发时刻附近的使命会放在一起履行。

WorkManager的用法

了解了WorkManager是什么后,咱们来看看它的根本用法步骤:
首要,咱们需要先界说一个后台使命,而且完成其具体的使命逻辑;
然后,咱们装备好该使命的运转条件和束缚信息,而且构建后台使命恳求
最终,咱们再将该后台使命的恳求传入WorkManager的enqueue()办法中,这样一来,体系就会挑选在合适的时刻运转。

接下来,咱们就开始这三个步骤,先界说一个后台使命,创立一个SimpleWorker类:

import android.content.Context
import android.util.Log
import androidx.work.Worker
import androidx.work.WorkerParameters
class SimpleWorker(context: Context, params: WorkerParameters) : Worker(context, params) {
    override fun doWork(): Result {
        Log.d("SimpleWorker", "do work in SimpleWorker")
        return Result.success()
    }
}

咱们先分析一下上面的代码,这个类咱们承继了Worker类,然后调用了它唯一的构造函数,接着再在类中重写了父类的doWork()办法,这个办法中咱们就能够去编写具体的后台使命逻辑。完成后,咱们还能看到AS的提示,咱们点击Learn More后就能知道,咱们能够检查APP InspectorWorkManager Inspector标签页中看到活跃工作器,感觉大致应该便是能够检查咱们的设备运转时WorkManager的后台工作情况,不过API要大于等于26。

安卓组件开发学习——WorkManager后台任务的使用

安卓组件开发学习——WorkManager后台任务的使用

言归正传,咱们再细说一下都doWork()办法,它是不会运转在主线程当中的,所以咱们能够在这个办法中运用耗时逻辑,而这个办法的回来要求是一个Result目标,用来表明使命的运转结果,大致有三种,用于表明成功的Result.success(),用于表明失利的Result.failure(),以及表明重试或者也是失利的Result.retry()办法,其间Result.retry()办法能够和WorkRequest.Builder的setBackoffCriteria()办法来从头履行使命。

前面咱们简略的后台使命已经界说好了,咱们来做第二步,也便是装备使命的运转条件和束缚信息。这部分的内容其实许多,由于咱们能够装备的内容是很丰厚的,但本篇就提一下最根底的装备:

binding.vButton.setOnClickListener {
    val request = OneTimeWorkRequest.Builder(SimpleWorker::class.java).build()
}

咱们在Activity中加了一个按钮,咱们的装备就写在这个按钮的点击事情中,首要,OneTimeWorkRequest.Builder是咱们WorkRequest.Builder的子类,能够用于构建单次运转的后台使命恳求,咱们调用它的build()办法就完成了构建,此外,WorkRequest.Builder还有一个子类PeriodicWorkRequest.Builder,它能够构建周期性运转的后台使命恳求,但为了下降设备性能消耗,它构造函数中传入的运转周期距离不能小于十五分钟,如下:

val requestT = PeriodicWorkRequest.Builder(SimpleWorker::class.java, 15,
TimeUnit.MINUTES).build()

这块咱们还是用单次的后台使命构建作为示范,最终一步,接着咱们的构建使命装备的代码下面,咱们将后台使命恳求传入WorkManager的enqueue()办法:

WorkManager.getInstance(applicationContext).enqueue(request)

这样就完成了咱们WorkManager的根本用法。

运转后咱们检查效果,其实便是咱们点击一下按钮,当即就看到日志窗口的日志,由于咱们没有加任何束缚,所以正常就当即运转了:

安卓组件开发学习——WorkManager后台任务的使用

总结

这儿便是咱们WorkManager的简略运用,后面在本文中还会更新上咱们的Result.retry()办法的运用和一些时刻方面的束缚。