持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第3天,点击查看活动详情
Android 玩转WorkManager(二)
如果在WorkManager中存在外部依赖,就可以使用一下方法在WorkManager中进行依赖注入
1、引入依赖库
implementation("androidx.hilt:hilt-work:1.0.0")
kapt("androidx.hilt:hilt-compiler:1.0.0")
2、在清单文件中配置(官方未列出此处配置)
<provider
android:authorities="${applicationId}.workmanager-init"
android:name="androidx.work.impl.WorkManagerInitializer"
xmlns:tools="http://schemas.android.com/tools"
tools:node="remove"/>
3、创建Worker
@HiltWorker
class PrintWorker @AssistedInject constructor(
@Assisted
val context: Context,
val apiHelper: ApiHelper, //外部提供依赖注入项
@Assisted
private val workerParameters: WorkerParameters
) : Worker(context, workerParameters) {
override fun doWork(): Result {
//需要执行的工作
}
}
4、在Application中进行工厂类的初始化,可以直接使用依赖包的HiltWorkerFactory进行实例的而生成
@HiltAndroidApp
class MainApp : Application(), Configuration.Provider {
@Inject
lateinit var workerFactory: HiltWorkerFactory
override fun getWorkManagerConfiguration(): Configuration {
return Configuration.Builder()
.setWorkerFactory(workerFactory)
.build()
}
}
5、调用Worker
val printWorker = OneTimeWorkRequestBuilder<PrintWorker>()
.setInitialDelay(500,TimeUnit.MILLISECONDS)
.setBackoffCriteria(BackoffPolicy.EXPONENTIAL,3000L,TimeUnit.MILLISECONDS)
.build()
WorkManager.getInstance(this)
.beginWith(OneTimeWorkRequest.from(MqttConnectionWorker::class.java))
.then(worker)
.enqueue()
///对于无需配置的worker使用From()
val myWorkRequest = OneTimeWorkRequest.from(MyWork::class.java)