Android 玩转WorkManager(二)

390 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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)