Jetpack系列(九) — WorkManager,android文件下载实战

WorkManager: 管理工作请求并使其运行,分散系统资源负载的方式调度工作请求,同时遵守指定的约束

WorkManager基本使用

基本使用
  1. 这里借用官网给图片做模糊效果的例子练习一下WorkManager的使用,首先创建Worker
  • 如果需要实例化可用Hilt注入Worker,我这里用的androidx.hilt:hilt-work的版本是1.0.0,所以直接使用@HiltWorker, 版本不同注解可能也不同,一般不需要
  • doWork()里面执行具体的迷糊操作,这里和官网保持一致

class BlurWorker constructor(
private val ctx: Context,
params: WorkerParameters
) : Worker(ctx, params) {

override fun doWork(): Result {
// 通知,记得加通道
makeStatusNotification(“Blurring image”, ctx)
return try {
val picture = BitmapFactory.decodeResource(
ctx.resources,
R.drawable.test
)
val output = blurBitmap(picture, ctx) // 模糊
val outputUri = writeBitmapToFile(ctx, output) // 保存图片
makeStatusNotification(“Output is $outputUri”, ctx)
Result.success()
} catch (throwable: Throwable) {
Result.failure()
}
}
}

  1. ViewModel当中通过WorkManager触发Worker,``WorkRequest`有三个子类,前两个
  • PeriodicWorkRequest 周期性执行多次,直至取消
  • OneTimeWorkRequest 仅仅执行一次
  • WorkRequestHolder 包含WorkRequest信息,不用于任务执行

@HiltViewModel
class MainViewModel @Inject constructor(
private val repository: WordRepository,
private val workManager: WorkManager
) : ViewModel() {

fun applyBlur() {
workManager.enqueue(OneTimeWorkRequest.from(BlurWorker::class.java))
}
}

  1. 实例化WorkManager,这里因为我用了Hilt,所以单独写一个Module创建WorkManager

@InstallIn(SingletonComponent::class)
@Module
object WorkModule {

@Provides

  • 26
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值