如何让由广播接收器创建的Worker访问仓库?
我在应用类的 onCreate 方法中创建了一个仓库(Repository)。我还在AndroidManifest.xml中声明了一个广播接收器,它会创建一个协程工作器(Coroutine Worker),我想在其中调用仓库中的一个方法。如何访问应用程序创建的那个实例?我在工作器中有 applicationContext,但我还没想清楚如何通过它访问应用程序的属性。
CheckInApplication.kt
class CheckInApplication : Application() {
lateinit var container: AppContainer
override fun onCreate() {
super.onCreate()
container = DefaultAppContainer(applicationContext)
}
}
Worker.kt
class CheckInWorker(ctx: Context, params: WorkerParameters) : CoroutineWorker(ctx, params) {
val TAG = "CHECK_IN_WORKER"
override suspend fun doWork(): Result {
return try {
//application.container.repository.fun()
Log.d(TAG, "Work Success")
Result.success()
} catch (throwable: Throwable) {
Log.e(TAG, "Work failure", throwable)
Result.failure()
}
}
}
解决方案
在 CheckInWorker 中,ctx 是一个 Context。给定一个 Context,你可以通过 via getApplicationContext() 获取 Application 的单例:
val application = ctx.applicationContext as CheckInApplication
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。