如何让由广播接收器创建的Worker访问仓库?

移动开发 2026-07-11

我在应用类的 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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章