Android NDK开发详解后台任务之自定义 WorkManager 配置和初始化

默认情况下,当您的应用启动时,WorkManager 使用适合大多数应用的合理选项自动进行配置。如果您需要进一步控制 WorkManager 管理和调度工作的方式,可以通过自行初始化 WorkManager 来自定义 WorkManager 配置。

按需初始化

通过按需初始化,您可以仅在需要 WorkManager 时创建该组件,而不必每次应用启动时都创建。这样做可将 WorkManager 从关键启动路径中移出,从而提高应用启动性能。如需使用按需初始化,请执行以下操作:

移除默认初始化程序

如需提供自己的配置,必须先移除默认初始化程序。为此,请使用合并规则 tools:node=“remove” 更新 AndroidManifest.xml。

从 WorkManager 2.6 开始,应用启动功能便已在 WorkManager 内部使用。如需提供自定义初始化程序,您需要移除 androidx.startup 节点。

如果您不在应用中使用应用启动功能,则可以将其彻底移除。

 <!-- If you want to disable android.startup completely. -->
 <provider
    android:name="androidx.startup.InitializationProvider"
    android:authorities="${applicationId}.androidx-startup"
    tools:node="remove">
 </provider>

否则,仅移除 WorkManagerInitializer 节点即可。

 <provider
    android:name="androidx.startup.InitializationProvider"
    android:authorities="${applicationId}.androidx-startup"
    android:exported="false"
    tools:node="merge">
    <!-- If you are using androidx.startup to initialize other components -->
    <meta-data
        android:name="androidx.work.WorkManagerInitializer"
        android:value="androidx.startup"
        tools:node="remove" />
 </provider>

如果您使用的 WorkManager 是 2.6 之前的版本,请改为移除 workmanager-init:

<provider
    android:name="androidx.work.impl.WorkManagerInitializer"
    android:authorities="${applicationId}.workmanager-init"
    tools:node="remove" />

如需详细了解如何在清单中使用合并规则,请参阅有关合并多个清单文件的文档。

实现 Configuration.Provider

让您的 Application 类实现 Configuration.Provider 接口,并提供您自己的 Configuration.Provider.getWorkManagerConfiguration 实现。当您需要使用 WorkManager 时,请务必调用方法 WorkManager.getInstance(Context)。WorkManager 会调用应用的自定义 getWorkManagerConfiguration() 方法来发现其 Configuration。(您无需自行调用 WorkManager.initialize。)
注意:如果您在初始化 WorkManager 之前调用已弃用的无参数 WorkManager.getInstance() 方法,该方法将抛出异常。即使您不自定义 WorkManager,您也应始终使用 WorkManager.getInstance(Context) 方法。

以下示例展示了自定义 getWorkManagerConfiguration() 实现:
Kotlin

class MyApplication() : Application(), Configuration.Provider {
     override fun getWorkManagerConfiguration() =
           Configuration.Builder()
                .setMinimumLoggingLevel(android.util.Log.INFO)
                .build()
}

Java

class MyApplication extends Application implements Configuration.Provider {
    @Override
    public Configuration getWorkManagerConfiguration() {
        return new Configuration.Builder()
                .setMinimumLoggingLevel(android.util.Log.INFO)
                .build();
    }
}

注意 :您必须移除默认初始化程序,自定义 getWorkManagerConfiguration() 实现才能生效。

WorkManager 2.1.0 之前版本的自定义初始化

对于 WorkManager 2.1.0 之前的版本,有两个初始化选项。在大多数情况下,默认初始化就足够了。如需更精确地控制 WorkManager,可以指定您自己的配置。

默认初始化

在您的应用启动时,WorkManager 会使用自定义 ContentProvider 自行初始化。此代码位于内部类 androidx.work.impl.WorkManagerInitializer 中,并使用默认 Configuration。自动使用默认初始化程序(除非明确停用它)。默认初始化程序适合大多数应用。

自定义初始化

如果您想控制初始化过程,就必须停用默认初始化程序,然后定义您自己的自定义配置。

移除默认初始化程序后,可以手动初始化 WorkManager:
Kotlin

// provide custom configuration
val myConfig = Configuration.Builder()
    .setMinimumLoggingLevel(android.util.Log.INFO)
    .build()

// initialize WorkManager
WorkManager.initialize(this, myConfig)

Java

// provide custom configuration
Configuration myConfig = new Configuration.Builder()
    .setMinimumLoggingLevel(android.util.Log.INFO)
    .build();

//initialize WorkManager
WorkManager.initialize(this, myConfig);

确保 WorkManager 单例的初始化是在 Application.onCreate() 或 ContentProvider.onCreate() 中运行。

如需查看可用自定义的完整列表,请参阅 Configuration.Builder() 参考文档。

本页面上的内容和代码示例受内容许可部分所述许可的限制。Java 和 OpenJDK 是 Oracle 和/或其关联公司的注册商标。

最后更新时间 (UTC):2023-10-31。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五一编程

程序之路有我与你同行

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值