即使应用程序尚未启动,Android 中 WorkManager 的工作线程是否也会开始运行?

Bia*_*ali 5 android backgroundworker kotlin android-workmanager

我正在学习 Udacity Android Kotlin 开发人员课程。在其中一课中,讲师教授了如何使用 WorkManager 执行后台任务,始终在后台缓存数据,以便在应用程序启动时显示新数据。

因此,启动 WorkManager 定期刷新数据的代码是在应用程序的主应用程序中定义的。

class DevByteApplication : Application() {

/**
 * onCreate is called before the first screen is shown to the user.
 *
 * Use it to setup any background tasks, running expensive setup operations in a background
 * thread to avoid delaying app start.
 */
val applicationScope = CoroutineScope(Dispatchers.Default)

override fun onCreate() {
    super.onCreate()
    Timber.plant(Timber.DebugTree())
    delayedInit()
}

private fun delayedInit() = applicationScope.launch {
    setupRecurringWork()
}

private fun setupRecurringWork() {
    val constraints = Constraints.Builder()
        .setRequiredNetworkType(NetworkType.UNMETERED)
        .setRequiresBatteryNotLow(true)
        .setRequiresCharging(true)
        .apply {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                setRequiresDeviceIdle(true)
            }
        }.build()

    val repeatingRequest = PeriodicWorkRequestBuilder<RefreshDataWorker>(1, TimeUnit.DAYS)
        .build()

    WorkManager.getInstance().enqueueUniquePeriodicWork(
        RefreshDataWorker.WORK_NAME,
        ExistingPeriodicWorkPolicy.KEEP,
        repeatingRequest)
}}
Run Code Online (Sandbox Code Playgroud)

问题是:

那么 WorkManager 是否仅在应用程序启动一次后才开始工作?或者一旦我们安装应用程序它就开始工作?

还,

1. 如果我们完全关闭手机 - 一旦我们重新打开手机,我们应用程序的 WorkManager 还会工作吗 2. 如果我们完全关闭应用程序 - WorkManager 还会工作吗?

如果您有专门讨论这些问题的资料来源,我很乐意阅读它们!

byl*_*azy 0

第一个问题 - 应用程序必须至少启动一次才能安排工作。

第二个问题没有明确的答案。

根据文档

计划的工作存储在内部管理的 SQLite 数据库中,WorkManager 负责确保该工作持续存在并在设备重新启动时重新安排。

WorkManager 适用于需要可靠运行的工作,即使用户离开屏幕、应用程序退出或设备重新启动也是如此。

但可能会有一些例外,例如参见这个答案。