WorkManager不会按需初始化。

3
我阅读了这些说明:https://developer.android.com/topic/libraries/architecture/workmanager/advanced/custom-configuration#on-demand。现在我有一个MyApplication类,但我不知道如何使用它,也找不到清晰的说明。 当请求WorkManager.getInstance时,自然会生成错误,因为MyApplication类没有被使用。我不明白如何激活此类供WorkManager使用。 AndroidManifest.xml:
<provider
  android:name="androidx.work.impl.WorkManagerInitializer"
  android:authorities="${applicationId}.workmanager-init"
  tools:node="remove"
  android:exported="false" />

MyApplication.java:

public class MyApplication extends Application implements Configuration.Provider {
    @NonNull
    @Override
    public Configuration getWorkManagerConfiguration() {
        return new Configuration.Builder().
        setExecutor(Executors.newFixedThreadPool(5)).build();
    }
}

我需要精确解决这个问题,所以对于好的帮助将不胜感激。如何使按需初始化(on-demand initialization)起作用?


你需要用你的应用程序ID替换{applicationId} - Gaurav Mall
@Gaurav Mall,但在一次Google的讲座中,他们告诉我这个变量本身应该被替换。 - rekniyayde
Google文档中使用了{}将其括起来。花括号内的内容称为通配符,需要由您替换。 - Gaurav Mall
@Gaurav Mall,明白了。但是下一步该怎么做还不清楚,而且我没有太多时间去弄清楚。 - rekniyayde
1个回答

5

WorkManager v2.1 引入了按需初始化。这意味着当您拥有自定义配置时,您无需调用 WorkManager.initialize(),只需要调用 getInstance(Context) 即可。

然而,仅调用已被弃用的 getInstance()(没有 Context 参数)是不够的。这在您提供的文档中已经说明。

我在2019年的 droidcon Berlin 中也有关于此的讲解 "Embracing WorkManager"。您可以在这里查看幻灯片和这里观看视频记录。


但是例如,如果您在onCreate中调用此方法:WorkManager w = WorkManager.getInstance(getApplicationContext()),那么将触发错误。他写道,WorkManager未初始化。 - rekniyayde
我假设您正在使用WorkManager v2.1或更高版本,旧版的WorkManager不包括按需初始化。 您能否发布带有错误的日志? - pfmaggi
我正在使用2.2.0版本。 - rekniyayde
这是onCreate中的代码:WorkManager.initialize(this, new Configuration.Builder() .setMinimumLoggingLevel(android.util.Log.INFO) .build()); - rekniyayde
正如我所写的,您不需要调用initialize方法。initialize()方法会在第一次调用getInstance(Context)时自动调用。这就是“按需”初始化的整个思想。 - pfmaggi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接