Konfigurasi dan Inisialisasi WorkManager Kustom

Secara default, WorkManager otomatis mengonfigurasi sendiri saat aplikasi Anda dimulai, dengan menggunakan opsi wajar yang cocok untuk sebagian besar aplikasi. Jika Anda memerlukan kontrol lebih tentang cara WorkManager mengelola dan menjadwalkan pekerjaan, Anda dapat menyesuaikan konfigurasi WorkManager dengan memulai WorkManager sendiri.

Cara paling fleksibel untuk memberikan inisialisasi kustom untuk WorkManager adalah dengan menggunakan inisialisasi on demand, yang tersedia pada WorkManager 2.1.0 dan yang lebih baru. Opsi lainnya akan dibahas nanti.

Inisialisasi On Demand

Inisialisasi on demand memungkinkan Anda membuat WorkManager hanya saat komponen tersebut diperlukan, bukan setiap kali aplikasi dimulai. Dengan begitu, WorkManager akan dipindah dari jalur startup kritis, sehingga menyempurnakan performa startup aplikasi. Untuk menggunakan inisialisasi on demand:

Hapus penginisialisasi default

Untuk menyediakan konfigurasi Anda sendiri, Anda harus menghapus penginisialisasi default terlebih dahulu. Untuk melakukannya, update AndroidManifest.xml menggunakan aturan penggabungan tools:node="remove".

Mulai WorkManager 2.6, Startup Aplikasi digunakan secara internal di dalam WorkManager. Untuk memberikan penginisialisasi kustom, Anda harus menghapus node androidx.startup.

Anda dapat menghapus Startup Aplikasi sepenuhnya jika tidak menggunakannya di aplikasi Anda.

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

Jika tidak, cukup hapus node 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>

Saat menggunakan versi WorkManager yang lebih lama dari 2.6, hapus workmanager-init:

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

Untuk mempelajari lebih lanjut cara menggunakan aturan penggabungan dalam manifes, lihat dokumentasi tentang menggabungkan beberapa file manifes.

Mengimplementasikan Configuration.Provider

Minta class Application mengimplementasikan antarmuka Configuration.Provider, dan sediakan implementasi Configuration.Provider.getWorkManagerConfiguration() Anda sendiri. Saat Anda perlu menggunakan WorkManager, pastikan untuk memanggil metode WorkManager.getInstance(Context). WorkManager memanggil metode getWorkManagerConfiguration() kustom aplikasi Anda untuk menemukan Configuration miliknya. (Anda tidak perlu memanggil WorkManager.initialize() sendiri.)

Berikut adalah contoh implementasi getWorkManagerConfiguration() kustom:

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();
    }
}

Inisialisasi kustom sebelum WorkManager 2.1.0

Untuk WorkManager versi sebelum 2.1.0, ada dua opsi inisialisasi. Umumnya, Anda hanya perlu menggunakan inisialisasi default. Untuk kontrol WorkManager yang lebih akurat, Anda dapat menentukan konfigurasi sendiri.

Inisialisasi default

WorkManager menggunakan ContentProvider kustom untuk menginisialisasi sendiri saat aplikasi Anda dimulai. Kode ini berada di androidx.work.impl.WorkManagerInitializer class internal, dan menggunakan Configuration default. Penginisialisasi default otomatis digunakan, kecuali jika Anda menonaktifkannya secara eksplisit. Penginisialisasi default cocok untuk sebagian besar aplikasi.

Inisialisasi kustom

Jika Anda ingin mengontrol proses inisialisasi, Anda harus menonaktifkan penginisialisasi default, lalu menentukan konfigurasi kustom sendiri.

Setelah penginisialisasi default dihapus, Anda dapat menginisialisasi WorkManager secara manual:

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);

Pastikan inisialisasi singleton WorkManager berjalan dalam Application.onCreate() atau dalam ContentProvider.onCreate().

Untuk daftar lengkap penyesuaian yang tersedia, lihat dokumentasi referensi Configuration.Builder().