Lui*_*reu 2 android kotlin dagger-2 jobservice
我正在尝试更新我的简单 android 应用程序以使用 Dagger2。我想我已经设法理解了一些基础知识,并且正在通过它创建基本的东西(活动、视图模型、助手)。
现在,还有一个小问题:该应用程序有一个按钮,按下该按钮后,必须安排作业服务。我可以重构我的 jobservice 以便它的依赖项通过它的构造函数传递,但是我如何从我的活动中实例化它?换句话说,我如何替换此代码:
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)
Run Code Online (Sandbox Code Playgroud)
所以实例化被降级为匕首?
谢谢!
经过一番挖掘,它最终比我想象的要容易......所以,我为我的工作绑定创建了一个新模块:
@Module
abstract class JobBindingModule {
@ServiceScoped
@ContributesAndroidInjector
internal abstract fun provideDbUpdatedJob(): DbUpdaterJob
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句,ServiceScoped 是一个新的注释,如下所示:
@Scope
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE, ElementType.METHOD)
annotation class ServiceScoped
Run Code Online (Sandbox Code Playgroud)
我已将该模块添加到我的 dagger 组件模块集合中。之后,我用属性注入替换了构造函数参数注入:
class DbUpdaterJob: JobService() {
@Inject
lateinit var dbManager: NewsManager
Run Code Online (Sandbox Code Playgroud)
最后,我重写了onCreate注入所需依赖项的方法:
override fun onCreate() {
super.onCreate()
AndroidInjection.inject(this)
}
Run Code Online (Sandbox Code Playgroud)
它似乎正在工作......
| 归档时间: |
|
| 查看次数: |
963 次 |
| 最近记录: |