gpt4 book ai didi

android - Dagger 2 : how to resolve a JobService?

转载 作者:行者123 更新时间:2023-11-29 15:35:06 26 4
gpt4 key购买 nike

我正在尝试更新我的简单 Android 应用程序以使用 Dagger2。我想我已经成功地理解了一些基础知识,并且基本的东西( Activity 、 View 模型、助手)是通过它创建的。

现在,还有一个小问题:该应用程序有一个按钮,按下该按钮后,必须安排工作服务。我可以重构我的 jobservice,以便其依赖项通过其构造函数传递,但如何从我的 Activity 中实例化它?换句话说,我如何替换这段代码:

    val serviceComponent = ComponentName(getApplication(), DbUpdaterJob::class.java)
var jobInfo = JobInfo.Builder(DB_UPDATER_JOB_ID, serviceComponent)
.setRequiredNetworkType(networkType)
.setPersisted(true)
.build()

val scheduler = getApplication<Application>().getSystemService(Context.JOB_SCHEDULER_SERVICE) as JobScheduler
val res = scheduler.schedule(jobInfo)

因此实例化被降级为 dagger?

谢谢!

最佳答案

经过一番挖掘,它最终比我想象的要容易......所以,我为我的作业绑定(bind)创建了一个新模块:

@Module
abstract class JobBindingModule {
@ServiceScoped
@ContributesAndroidInjector
internal abstract fun provideDbUpdatedJob(): DbUpdaterJob
}

顺便说一句,ServiceScoped 是一个新的注释,如下所示:

@Scope
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE, ElementType.METHOD)
annotation class ServiceScoped

我已将该模块添加到我的 dagger 组件模块集合中。之后,我用属性注入(inject)替换了构造函数参数注入(inject):

class DbUpdaterJob: JobService() {
@Inject
lateinit var dbManager: NewsManager

最后,我重写了 onCreate 方法来注入(inject)所需的依赖项:

override fun onCreate() {
super.onCreate()
AndroidInjection.inject(this)
}

它似乎正在发挥作用......

关于android - Dagger 2 : how to resolve a JobService?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52317956/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com