【问题标题】:Need Context in WorkManagerWorkManager 中需要上下文
【发布时间】:2020-06-01 11:07:35
【问题描述】:

我正在使用WorkManager 1.0.0-alpha05 安排一些任务在我的应用可能正在运行或可能未运行的功能中运行。我要做的工作需要context,那么我怎样才能将上下文传递给它呢?

class CompressWorker : Worker() {

    override fun doWork(): Result {
        //need context here
        Log.e("alz", "work manager runs")
        return Result.SUCCESS
    }
 }

这是我初始化工作的方式。

val oneTimeWork = OneTimeWorkRequestBuilder<CompressWorker>()
        .setInitialDelay(15, TimeUnit.MINUTES)
        .build()

WorkManager.getInstance().enqueue(oneTimeWork)

【问题讨论】:

    标签: android android-jetpack android-workmanager


    【解决方案1】:

    这取决于你需要什么样的Context。根据the documentation of the Worker class,你可以直接从Worker类中调用getApplicationContext()方法来获取整个应用程序的Context,在这个用例中应该是合理的。

    【讨论】:

    【解决方案2】:

    documentation of the Worker class 确实没有提到调用getApplicationContext() 应该是获取Context 的首选方式。另一方面,它确实明确记录了Worker 的公共构造函数将Context 作为第一个参数。

    public Worker (Context context, 
                WorkerParameters workerParams)
    

    因此,如果您需要 Worker 类中的上下文,请使用其构造中的上下文。

    【讨论】:

    • 其实是一回事!作为参数传递的上下文是从getApplicationContext() 返回的内容。参考Worker类的实现!
    • 如果是这样,那么通过Worker的构造函数传入上下文的目的是什么?似乎目的是让 Worker 中的逻辑在需要时使用该上下文?
    • 你说得对!工作对象在内部将上下文用于自己的目的。几乎没有任何 android 框架/库结构不需要上下文对象!
    • 因此,如果我们将 Worker 子类化,那么为我们的类使用该上下文对象似乎也是合理的,不是吗?
    • 你是对的@auspicious99,在某些情况下,在工作类中使用 getApplicationContext() 会引发异常。最好使用 Worker 的构造函数中的上下文。
    猜你喜欢
    • 2019-08-16
    • 2013-03-05
    • 1970-01-01
    • 2019-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多