自訂 WorkManager 設定與初始化

根據預設,WorkManager 會在應用程式啟動時自動設定,使用適合大多數應用程式的合理選項。如要進一步控制 WorkManager 管理和排程作業的方式,您可以藉由自行初始化 WorkManager 來自訂 WorkManager 設定。

隨選初始化

隨選初始化可讓您僅在需要該元件時建立 WorkManager,而非每次應用程式啟動時建立。這樣做會將 WorkManager 從關鍵的啟動路徑移出,並提升應用程式啟動效能。如要使用隨選初始化功能:

移除預設初始化器

如要提供自己的設定,您必須先移除預設初始化器。如要這麼做,請使用合併規則 tools:node="remove" 更新 AndroidManifest.xml

自 WorkManager 2.6 開始,在 AppManager 中內部使用 App Startup。如要提供自訂初始化器,您必須移除 androidx.startup 節點。

如果您的應用程式沒有使用 App 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>

如果您使用的是 2.6 以下版本的 WorkManager,請改為移除 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)。

下列是自訂 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();
    }
}

在 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() 參考說明文件。