如果您需要将更多数据传入和传出 Worker,则应将数据放在其他地方,例如 Room database。作为一个例子,我传入上面图像的 URI,而不是图像本身。...定义您的 work 应该如何运行 一方面 Worker 定义工作的作用,另一方面 WorkRequest 定义应该如何以及何时运行工作。...在幕后,WorkManager 包括以下部分: 内部 TaskExecutor:一个单线程 Executor,处理所有排队工作的请求。...WorkManager 数据库:一个本地数据库,可跟踪所有工作的所有信息和状态。这包括工作的当前状态,工作的输入和输出以及对工作的任何约束限制。...观察你的 WorkRequest 状态 监视工作的最简单方法是使用 LiveData 类。如果你不熟悉 LiveData,它是一个生命周期感知的可监视数据持有者 —— 这里 对此有更详细的描述。
WorkManager需要API级别为14,同时可保证电池续航时间。...针对不需要即时完成的任务 在Android开发中,经常会遇到后台下载、上传日志信息等需求,一般来说,这些任务是不需要立即完成的,如果我们自己使用来管理这些任务,逻辑可能会非常负责,并且如果处理不恰当会造成大量的电量消耗...1.3 WorkManager的几个概念 使用WorkManager时有几个重要的概念需要注意。 Worker:任务的执行者,是一个抽象类,需要继承它实现要执行的任务。...2.2 定义 Worker 创建一个继承自Worker的Worker类,然后在Worker类的doWork()方法中执行要运行的任务,并且需要返回任务状态的结果。...输入值以键值对的形式存储在 Data 对象中,并且可以在工作请求中设置,WorkManager 会在执行工作时将输入 Data 传递给工作,Worker 类可通过调用 Worker.getInputData
接下来的内容中,我都会使用需要传入 context 的新语法来获取 WorkManager 实例。...之所以存在这一约束,是因为在一个任务链中,您会在一个 Worker 的状态转变为 SUCCEEDED 时过渡到任务链中的下一个 Worker,而 PeriodicWorkRequest 没有 SUCCEEDED...数据的输入和输出 WorkManager 允许您传递一个 Data 对象给您的 Worker,同时在 success 和 failure 方法被调用时,也会返回一个新的 Data 对象给您 (由于在您返回...如果您选择使用 REPLACE 策略,您的 Worker 应当适当地处理停止状态,因为这种策略下,如果一个新的 WorkRequest 在 Worker 正在运行时加入队列,WorkManager 就可能不得不取消正在运行的实例...不过您也应该在任何情况下都处理好停止状态,因为 Worker 正在被执行时,如果某个约束条件不再被满足,WorkManager 也可能会停止您的任务。 有关独特任务的更多信息,请参阅文档:唯一工作。
5月8号, I/O大会上推出了Architeture新组件WorkManager。 由于Android版本的不断更新,后台任务的处理变得越来越复杂。...WorkManager使用LiveData来干会任务的数据和状态,所以,你的Activity可以观察这个LiveData,并且每当任务完成时都会得到通知。...Worker:在WorkManager世界中,Worker等同于需要在后台执行的任务或作业。这是一个抽象类。你需要继承它。您的Worker类包含有关如何执行该任务的信息,但它没有关于何时运行的信息。...Worker类,然后重写此类的 doWork() 方法,我们需要指定Worker类如何执行这个操作,但是不应该出现任何关于任务在何时运行的信息。...要取消任务,我们需要这个任务的Work ID,当然Work ID可以从WorkRequest对象中获取。
工作的 "持久化" 特性 WorkManager 可以处理您指派给它的任何类型的工作,因此它已经进化成了一个专门处理任务且值得信赖的好工具。...WorkManager 在全局作用域中执行您定义的 Worker,这意味着只要您的应用还在运行,不论是设备方向的变化,还是 Activity 被回收等,您的工作会被一直留存。...从用户的角度来说,加急工作是由用户发起的,因此对用户而言非常重要。甚至应用不在前台时,这些工作也需要被启动执行。比如聊天应用需要下载一条消息中的附件,或者应用需要处理付款订阅的流程。...要实现在不同进程中执行 Worker,您需要扩展 RemoteCoroutineWorker 类。...(context).enqueue(request) △ 将 RemoteWork 对象放入队列示例代码 组件名称是软件包名和类名的组合,您需要将其添加到工作请求的输入数据中,然后用这个输入数据创建工作请求
后台任务检查器是应用检查套件的一部分,它针对应用的几个方面提供更丰富详细的信息。为了充分利用检查器,您的应用需要使用 WorkManager 2.5 或更新的版本。...和手动搜索调用信息相比,这种经过编组整理的方式能够明显提升分析效率。您可以看到特定 Worker 是否受到限制,以及更加详细的频率和执行状态信息。...输出数据包含着每个 Worker 的唯一标识符,会按照队列顺序进行传递。 △ 演示 Worker 执行失败的场景 这里为您展示当工作链中的某个 Worker 执行失败时的场景。...在工作的接续队列中插入了一个出错的 Worker,然后重启应用。可以看到,上一次运行的结果仍然在这里供您检查。这也进一步印证了刚才说到的工作数据持久化特性。...WorkManager 文档: 使用 WorkManager 调度任务 Codelab: 使用 WorkManager 处理后台任务 Codelab: WorkManager 进阶知识 WorkManager
WorkManager 是一个 Android Jetpack 扩展库,它可以让您轻松规划那些可延后、异步但又需要可靠运行的任务。...如 WorkManager 发布日志 中描述的那样,只需要在 build.gradle 文件中添加 androidx.work:work-runtime-ktx 依赖项,即可使用 KTX 版的 WorkManager...更简洁且惯用 当您需要构造一个数据对象,并且需要将它传入Worker 类或者从 Worker 类返回时,KTX 版 WorkManager 提供了一种语法糖。...CoroutineWorker 的另一个特性是可以自动处理任务的暂停和取消,而 Worker 类需要实现 onStopped() 方法来处理这些情况。...在这里,我想重点介绍一下什么是 CoroutineWorker,并且涵盖一些细小的但很重要的区别,以及深入了解如何使用在 WorkManager v2.1 中引入的新测试特性,来测试您的 CoroutineWorker
WorkManager 提供了一系列 API 可以更加便捷地规划异步任务,即使在应用被关闭之后或者设备重启之后,仍然需要保证立即执行的或者推迟执行的任务被正常处理。...在这个 WorkManager codelab 教程中,我们会对图片进行模糊化处理,并且将处理后的数据存储在磁盘上。我们看一下这个过程中需要哪些操作。...work 请求,在本例中,我们希望整个操作仅运行一次,所以我们使用 OneTimeWorkRequest.Builder,将需要模糊化处理的图片的 Uri 作为参数传入。...Worker 的时候,WorkManager 会在后台线程中自动调用 Worker.doWork()。...Worker.doWork() 属于同步调用 -- 您的后台操作需要以阻塞的方式执行,并且所有任务需要在整个 doWork() 函数结束的时候完成。
其中 androidx.* 库与 Framework API 解耦,这能够提供向后兼容的同时,也能更频繁地更新。 Android Jetpack 中的架构组件可帮助您设计稳健、可测试且易维护的应用。...在 2.1 中,您可以用 @DatabaseView 注解您的数据类,但这时您不需要创建一个数据表,而是直接将 BigQuery 放在注解部分,让其成为一个能快速检索的视图: @DatabaseView...WorkManager WorkManager 是一个后台进程库,用于处理那些不需要即时处理的任务,而且可以在应用甚至设备重启后依然确保任务正确触发。...在 WorkManager 2.1 中,您可以通过重载 Configuration.Provider 中的方法来获得一个 WorkManager 的配置对象。...2.0 中 WorkManager.getInstance() 方法并不需要开发者提供参数,而在 2.1 中开发者传入 context 参数后,WorkManager 如果没有初始化,它会基于参数访问
当需要执行长时间运行的任务,而应用处于后台状态时,您会遇到 后台执行限制,该特性是在 Android 8.0 之后增加的。我们鼓励开发者进行行为变更以提升整个平台的用户体验。...阅读本文,了解通过 WorkManager 处理的需长时间运行并且立即执行的任务的好处以及如何进行配置。...API 介绍 自 WorkManager 版本 2.3.0 起,每个 Worker 都可以在前台服务中调用方法。...而在前台服务的 Worker 中运行的任务也不会受到后台任务十分钟的限制。 从立即执行开始 让我们来看一下如何让一个已存在的 worker 在前台服务中执行任务。...为此,您需要创建一个 ForegroundInfo 对象作为 setForeground() 的参数。
使用 WorkManager 时,您需要自己定义 Worker/CoroutineWorker 或任何 ListenableWorker 的派生类。...WorkManager 的文档 中描述,禁用操作要在您的 AndroidManifest.xml 文件中完成。...当您的应用中只有一个 Worker 类时,以上便是您所需要做的所有事情。...在 DelegatingWorkerFactory 中注册您的工厂,这将有助于协调多个工厂的执行。 在这种情况下,您的工厂需要检查是否知道如何处理作为参数传入的 workerClassName。...然而当您遇到某些情况时,诸如需要增加日志级别或需要传入额外参数到您的 Worker 时,则需要一个自定义的配置。 希望您能通过本文对此主题有一个良好的认识。如果您有任何疑问,可以在评论区中留言。
如果工作始终要通过应用重启和系统重新启动来调度,便是持久性的工作。由于大多数后台处理操作都是通过持久性工作完成的,因此 WorkManager 是适用于后台处理操作的主要推荐 API。...在工作器中调用 setForeground() 来处理通知。 可延期 一次性或定期 PeriodicWorkRequest 和 Worker。 接下来来看具体的使用方法。...() 方法可让 WorkManager 在您调用 setExpedited() 时显示通知。...观察工作执行结果 在任务完成后,我可能需要进行更新UI或者业务逻辑操作。...所以在第4小节中,默认Android12上并不会显示通知栏 WorkManager 只是一个处理定时任务的工具 WorkManager 最早兼容到 API 14(Android 4.0)
今天我们来讲以下google推荐我们使用jetpack进行后台任务处理的组件:workManager。...调用流程 看懂上面图片的意思了吧,翻译一下就是workManager发起一个任务,如果当前程序正在运行,它就会再开一个工作线程去处理,如果当前程序退出或者在后台,它就会选择一个合适的方案去执行,这就包括了...workmanager相关类 worker 一个抽象类,需要继承worker并重写doWork()方法来进行具体的逻辑代码。...workStatus 包含任务的状态和信息,以LiveData的形式提供给观察者。 data 在worker中用来存储数据,建造者模式,通过builder()来设置值,键值对存储。...return jsonString } } 网络请求用的是kotlin中的协程,api接口是网络上随便找的。
Hilt 让您只需考虑声明和注入绑定中的重要部分,而不必担心管理依赖注入的初始化和连接等部分。...新增的 TestNavHostController 可以让您访问 Navigation 回退栈,并且在测试中设置当前的目的地。...WorkManager 库 最新发布的 WorkManager 支持了那些需要长时间运行的 Worker 或者应被操作系统保持运行在前台的服务。...另外还有一些 API 的更新,包括支持设置和观察 Worker 的中间进度、一些对于当前 Worker 查询 API 的优化、一些对于进行中的工作器的调度优化。...在 最近的版本 中,CameraX 引入了对于 PreviewView 组件的优化。该组件如今可以更好地处理应用生命周期和 ViewPager。
虽然可以很方便的将任务配置成 WorkManager 的 Worker,但将 Worker 加入到队列中后就很难监控它的执行情况,遇到问题也不方便调试。...我将使用 architectural-components 仓库 中的 WorkManager 示例应用来演示后台任务检查器 (需要将工程中 versions.gradle 里的 versions.work...△ 您可以取消任何正在运行的 Worker 如果您的应用中包含像这样复杂的链式关系,那 Graph View 就会很有用。...对象 中。...如果您的应用使用了 WorkManager,请尝试使用并告诉我们您的想法,或者和我们分享您的 WorkManager 艺术!
如果这些api没有被正确的使用,则可能导致消耗大量的电量。WorkManager为应用程序中那些不需要及时完成的任务提供了一个统一的解决方案,以便在设备电量和用户体验间达到一个比较好的平衡。...WorkManager有三个重要特点,分别如下: 1.针对的是不需要及时完成的任务 2.保证任务一定被执行 3.兼容范围广,最低能兼容API Level14 二.WorkManager的基本使用方法...);//将任务提交系统 } } 4.将任务提交系统:WorkManager.getInstance(this).enqueue(oneTimeWorkRequest); 5.观察任务的状态...,任务提交系统后,可以通过WorkInfo获知任务的状态,有三种方式获取WorkInfo对象: (1)WorkManager.getWorkInfosByTag() (2)WorkManager.getWorkInfoById...6.WorkManager与Worker之间的参数传递 WorkManager通过setInputData()方法向Worker传递数据,数据的传递通过Data对象来完成,需要注意的是,Data
WorkManager 是一个 Android Jetpack 扩展库,它可以让您轻松规划那些可延后、异步但又需要可靠运行的任务。...如果您使用 Dagger 在您的应用中传递 Retrofit 服务的引用,而且您想要将其传递给您的 Worker,则需要使用 Dagger 将该引用注入到自定义的 WorkerFactory 中。...,由于在 WorkerFactory 级别处理了参数的传递,因此在 Worker 类上没有 Dagger 注解。...Worker,同时也了解了如何将 WorkManager 集成到 iosched 这类的大型应用中。...然而当您遇到某些情况时,诸如需要增加日志级别或需要把额外参数传入到您的 Worker 时,则需要一个自定义的配置。
在 WorkManager 2.5 中,我们让多进程应用能够更容易地访问在指定进程中运行的特定 WorkManager 实例。...现在,我们更是在 WorkManager 2.6 中进一步增加了能够让 Worker 在任意进程中运行的支持,并且能将 Worker 绑定到指定的进程。...多进程支持对于需要在多个进程中运行 Worker 的应用非常有用。...最后,如果您对于 WorkManager 有任何的问题或想法,请随时 提交到我们公开的问题跟踪器 中。 欢迎您 点击这里 向我们提交反馈,或分享您喜欢的内容、发现的问题。...您的反馈对我们非常重要,感谢您的支持!
dependencies() 被用来指定多个依赖库的初始化顺序。在这个示例中我并不需要这个功能,因为我只需要处理 WorkManager。...一个库的 content provider 负责了其初始化的实现,所以您通常都可以参考那个类中的代码来手动实现它。...举个例子,或许在您应用的一个特殊的流程中需要某一个包含 content provider 初始化的库,但是这个库并不需要在应用启动的时候立即被加载,又或者在某些情况下它根本不需要被加载。...您需要使用一个 context 对象来创建 AppInitializer 对象,然后可以向其传递一个您为初始化各种不同库创建的 Initializer 引用。...您能否利用应用启动库从合并的 manifest 文件中移除一些甚至所有这些 content provider,并观察它如何影响启动时间?您能否在实现这个的同时不影响运行时行为呢?
领取专属 10元无门槛券
手把手带您无忧上云