Diagger2-Hilt 依赖注入WorkManager

根据指南提供的教程并不能有效的完成WorkMnanger的注入,因此记录本文。

指南地址:Hilt 和 Jetpack 集成  |  Android 开发者  |  Android Developers

1:引入依赖库

    implementation 'androidx.hilt:hilt-work:1.0.0'
    kapt 'androidx.hilt:hilt-compiler:1.0.0'

2:创建Work

这里使用了@AssistedInject @Assisted执行辅助注入,同时这里增加了一个参数g,该参数需要外部提供注入实例。常见的需求包括注入Retrifit2的ApiService实例,数据库Room的Dao实例,数据仓库实例。

@HiltWorker
class HomeWork @AssistedInject constructor(
    @Assisted context: Context,
    @Assisted parameters: WorkerParameters,
    private val g: Gson
) : Worker(context, parameters) {
    override fun doWork(): Result {
        val data = g.fromJson("{}", JsonObject::class.java)
        Log.e("nil", "Home Work ==> $data")
        return Result.success()
    }
}

3:编写独立的Factory

由于依赖包已经提供了HiltWorkerFactory类,因此不需要额外编写工厂实例。

4:在AndroidManifest.xml的application节点中注册WorkManager

这一步是必须的,官方教程未展示这一步导致,无法执行实例。

        <provider
            android:name="androidx.work.impl.WorkManagerInitializer"
            android:authorities="${applicationId}.workmanager-init"
            tools:node="remove" />

5:在Application中实现工厂模式初始化。

直接使用依赖包提供的HiltWorkerFactory,用于生成实例。

@HiltAndroidApp
class MainApp : Application(), Configuration.Provider {

    @Inject
    lateinit var workerFactory: HiltWorkerFactory

    override fun getWorkManagerConfiguration(): Configuration {
        return Configuration.Builder()
            .setWorkerFactory(workerFactory)
            .build()
    }
}

6:调用Work

测试样例使用OneTimeWorkRequest,具体的请求类型自行定义。

WorkManager.getInstance(this).enqueue(OneTimeWorkRequest.from(HomeWork::class.java))

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值