:备注:最近发布的WorkManager2.5.0更适合在多进程环境中使用,并提供了多项稳定性改进。因此,如果您有一个管理多个进程的应用程序,并且需要一种健壮的方式来管理后台工作(不再出现初始化错误?),那么此版本是您的首选。您需要对代码进行一些更改,继续阅读以了解更多信息。在本文的最后,我还将列出此版本的WorkManager库中的一些其他行为更改和添加。介绍:work-multiprocess,一种新的多进程工件,通过将作业调度统一到单个进程中来带来性能改进。要开始使用此工件,请将其添加到您的应用程序中。实施“androidx.work:work-multiprocess:2.5.0”您现在可以选择WorkManager将用于对WorkRequest进行排队并运行其进程内调度程序的指定进程。选择hhttps://developer.android.google.cn/topic/libraries/architecture/workmanager/advanced/custom-configuration使用Configuration.Provider的配置如下图。classMyApplication():Application(),Configuration.Provider{overridedefungetWorkManagerConfiguration()=Configuration.Builder().setProcessName("com.example:remote").build()}注意:您需要将完全限定的进程名称作为setProcessName参数传递,其中包含您的应用程序包名称,后跟一个冒号和主机的进程名称,例如com.example:remote。使用work-multiprocess时,您需要使用RemoteWorkManager(不是WorkManager)来管理您的工作请求。RemoteWorkManager将始终使用指定的进程来排队您的工作。这确保您不会在调用过程中意外初始化新的WorkManager。进程内调度程序也运行在指定的同一进程中。RemoteWorkManagerhttps://developer.android.google.cn/reference/androidx/work/multiprocess/RemoteWorkManager优点当像上面那样配置WorkManager并使用RemoteWorkManager来调度作业时,您的工作在多进程应用程序管理中将会更加快速和可靠。这是因为SQLite争用大大减少(因为我们不再依赖基于文件的锁定),并且不再需要跨进程作业协调,因为您的应用程序只会在您指定实例的进程中运行单个WorkManager。争用https://en.wikipedia.org/wiki/Resource_contention行为更改:twisted_rightwards_arrows:在作业协调之前,当ActivityManager无法实例化JobService以启动作业时,作业将由于潜在问题而被静默删除该平台。WorkManager现在确保当通过协调WorkRequest对象与作业创建“app”实例时,每个WorkRequest将有一个回退调度程序作业。限制内部数据库增长我们发现应用程序崩溃的原因之一是设备存储空间不足。这主要发生在存储空间本来就低的设备上。但是,当应用程序安排大量工作时,设备存储空间不足的部分问题是WorkManager。默认情况下,内部WorkManager数据库会保留已完成作业的记录7天。现在,这个周期已经减少到1天,大大减少了数据库的大小。我们缩短了缓冲持续时间,以便您可以使用keepResultsForAtLeast()API控制作业应保留多长时间。新的测试API:sparkles:如果将ListenableFuture与WorkManager一起使用,测试将变得更容易—TestListenableWorkerBuilderKotlin扩展现在接受任何扩展ListenableWorker的类,从而在测试期间为您提供更大的灵活性。错误修复:错误:除了新功能外,此版本还包含多个错误修复,以提高WorkManager的稳定性、可靠性和性能。您可以在发行说明中看到所有更改和修复的错误。发行说明https://developer.android.google.cn/jetpack/androidx/releases/work#2.5.0如何改进WorkManager通过GitHub为WorkManager做贡献:woman:?:computer:WorkManager和其他几个Jetpack库被接受内容通过GitHub贡献。AlanViverette写了一篇关于整个过程的广泛博客文章。AlanViverettehttps://medium.com/@alan.viverette详细博文https://medium.com/androiddevelopers/introducing-jetpack-on-github-c2c9f12e62a9如果您遇到问题请告诉我们:备注:在2.5版中.0大多数修复的错误都是通过公共问题跟踪器报告的。公共问题跟踪器https://issuetracker.google.com/issues?q=componentid:409906创建可修复问题的最佳方法是创建一个我们可以重现的问题。为了帮助我们重现该问题,我建议您使用WorkManager示例,或提供您的示例代码和问题描述。创建可重现的问题https://issuetracker.google.com/issues/new?component=409906WorkManager示例https://github.com/android/architecture-components-samples/tree/main/WorkManagerSample应用程序中使用的WorkManager库。
