WorkManager
: 管理工作请求并使其运行,分散系统资源负载的方式调度工作请求,同时遵守指定的约束
WorkManager基本使用
基本使用
- 这里借用官网给图片做模糊效果的例子练习一下
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()
}
}
}
- 在
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))
}
}
- 实例化
WorkManager
,这里因为我用了Hilt
,所以单独写一个Module
创建WorkManager
@InstallIn(SingletonComponent::class)
@Module
object WorkModule {
@Provides