پیکربندی و مقداردهی اولیه WorkManager سفارشی

به‌طور پیش‌فرض، WorkManager هنگام شروع برنامه شما به‌طور خودکار خودش را پیکربندی می‌کند، و از گزینه‌های معقولی استفاده می‌کند که برای اکثر برنامه‌ها مناسب است. اگر به کنترل بیشتری بر نحوه مدیریت و زمان‌بندی کار توسط WorkManager نیاز دارید، می‌توانید با مقداردهی اولیه WorkManager توسط خودتان، پیکربندی WorkManager را سفارشی‌سازی کنید.

راه‌اندازی درخواستی

مقداردهی اولیه درصورت درخواست به شما امکان می‌دهد WorkManager را فقط زمانی ایجاد کنید که آن مؤلفه موردنیاز باشد، نه هربار که برنامه راه‌اندازی می‌شود. انجام این کار WorkManager را از مسیر راه‌اندازی بحرانی شما خارج می‌کند و عملکرد راه‌اندازی برنامه را بهبود می‌بخشد. برای استفاده از مقداردهی اولیه درخواستی:

مقداردهی اولیه پیش‌فرض را بردارید

برای ارائه پیکربندی خودتان، ابتدا باید مقداردهی اولیه پیش‌فرض را بردارید. برای انجام این کار، AndroidManifest.xml را بااستفاده از قانون ادغام tools:node="remove" به‌روز کنید.

از WorkManager 2.6، راه‌اندازی برنامه به‌صورت داخلی در WorkManager استفاده می‌شود. برای ارائه مقداردهی اولیه سفارشی باید گره 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>

هنگام استفاده از نسخه 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() آورده شده است:

کاتلین

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

جاوا

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 قبل‌از نسخه ۲.۱.۰، دو گزینه مقداردهی اولیه وجود دارد. در بیشتر موارد، مقداردهی اولیه پیش‌فرض تنها چیزی است که نیاز دارید. برای کنترل دقیق‌تر WorkManager، می‌توانید پیکربندی خودتان را مشخص کنید.

مقداردهی اولیه پیش‌فرض

WorkManager از یک ContentProvider سفارشی برای مقداردهی اولیه خود هنگام شروع برنامه شما استفاده می‌کند. این کد در کلاس داخلی androidx.work.impl.WorkManagerInitializer قرار دارد و از Configuration پیش‌فرض استفاده می‌کند. مقداردهی اولیه پیش‌فرض به‌طور خودکار استفاده می‌شود مگراینکه آن را صریحاً غیرفعال کنید. مقداردهی اولیه پیش‌فرض برای اکثر برنامه‌ها مناسب است.

مقداردهی اولیه سفارشی

اگر می‌خواهید فرایند مقداردهی اولیه را کنترل کنید، باید مقداردهی اولیه پیش‌فرض را غیرفعال کنید، سپس پیکربندی سفارشی خودتان را تعریف کنید.

پس‌از برداشتن مقداردهی اولیه پیش‌فرض، می‌توانید WorkManager را به‌صورت دستی مقداردهی اولیه کنید:

کاتلین

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

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

جاوا

// 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() اسناد مرجع را ببینید.