乐趣区

关于android:在多进程应用中使用-WorkManager

作者 / Android 开发者关系 Ben Weiss

???? 最近公布的 WorkManager 2.5.0 更实用于在多过程环境中应用,并提供了多项稳定性改良。

因而,如果您的某款利用治理着多个过程,并须要一种持重的形式来治理后盾工作 (不再呈现初始化谬误 ⚠),那么此版本便是您的首选。

您须要对代码进行几处更改,请持续浏览以理解更多内容。

在本文开端,我还将列出此版本 WorkManager 库中的一些其余行为变更和新增内容。

隆重推出: work-multiprocess

这一全新的多过程工件通过将作业调度对立为单个过程,从而带来性能的晋升。要开始应用此工件,请将其增加到您的利用。

Implementation "androidx.work:work-multiprocess:2.5.0"

您当初能够 抉择 WorkManager 用于将 WorkRequest 退出队列的指定过程,并运行其过程中调度程序。

应用 Configuration.Provider 的配置如下所示。

class MyApplication() : Application(), Configuration.Provider {override fun getWorkManagerConfiguration() =
    Configuration.Builder()
      .setProcessName("com.example:remote")
      .build()}

留神: 您须要传递齐全限定的过程名称作为 setProcessName 的参数,该名称由您的利用包名称,后跟英文冒号和主机的过程名称组成,例如 com.example:remote。

应用 work-multiprocess 时,您须要应用 RemoteWorkManager (而非 WorkManager) 来治理您的工作申请。RemoteWorkManager 将始终应用指定的过程将您的工作退出队列。这可确保您不会在调用过程中意外初始化新的 WorkManager。过程中调度程序也会在指定的同一过程中运行。

劣势

依照上述办法配置 WorkManager 并应用 RemoteWorkManager 调度作业时,您的工作会在多过程利用中失去更疾速、更牢靠的治理。这是因为 SQLite 争用 状况会大大减少 (因为咱们不再依赖于以文件为根底的锁定),且不再须要跨过程的作业协调,因为您的利用仅会在您指定的过程中运行单个 WorkManager 实例。

行为变更 ????

作业协调

之前,当 ActivityManager 无奈实例化 JobService 以启动作业时,该作业将因为平台中的底层问题而被静默删除。WorkManager 当初可确保通过协调 WorkRequest 对象与作业创立 “ 利用 ” 实例时,每个 WorkRequest 都会有一个后备调度程序作业。

限度外部数据库增长

咱们发现利用解体的起因之一是设施存储空间有余。这种状况次要产生在存储空间原本就很少的设施上。然而,当利用调度 大量 工作时,导致设施存储空间有余的局部起因在于 WorkManager。

默认状况下,外部的 WorkManager 数据库会将已实现作业的记录保留 7 天。而当初,这个期限已缩小至 1 天,大大降低了数据库的大小。

咱们缩短了缓冲区持续时间,这样您就能借助 keepResultsForAtLeast() API 管制作业应被保留的时长。

全新测试 API ✨

如果您将 ListenableFuture 和 WorkManager 配合应用,测试工作会变得更轻松 — TestListenableWorkerBuilder Kotlin 扩大程序当初能够接管任何类扩大 ListenableWorker,从而在测试过程中为您提供更高的灵活性。

问题修复 ????

除了新增的性能,此版本还蕴含多个谬误修复,以进步 WorkManager 的稳定性、可靠性和性能。您能够在 版本阐明 中查看所有更改以及修复的谬误。

如何改良 WorkManager

通过 GitHub 向 WorkManager 奉献内容 ????‍????

WorkManager 以及其余几个 Jetpack 库都承受通过 GitHub 奉献的内容。

Alan Viverette 撰写了一篇对于整个流程的 详尽博文。

遇到问题时请通知咱们 ????

2.5.0 版本中修复的大部分谬误都是通过 公开问题跟踪器 报告的。

创立可修复问题 的最佳形式就是创立一个咱们可复现的问题。为帮忙咱们再现问题,建议您应用该 WorkManager 示例,或通过问题形容提供您的示例代码。

是时候口头起来,并更新您利用中应用的 WorkManager 库了。

退出移动版