首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

WorkManager: 周期性任务

独特任务 某些 WorkManager 用例可能会陷入一种模式:当应用启动,会在第一一些任务加入队列。这些任务可能是您想要周期执行后台同步任务,也可能是预定内容下载。...不论是什么,常见模式都是需要在应用启动第一这些任务入队。 我已经看到这种模式几次,在 Application#onCreate 方法中,开发者创建了 WorkRequest 并将其入队。...所以,在应用每次启动都尝试 Worker 加入队列,会导致每次启动都添加一个新 WorkRequest。...但对于周期性任务来说,“结束”是一个完全不同概念,结果是您可能会轻易地多个周期性任务重复加入队列。...针对这种情况解决方案是,使用 WorkManager#enqueueUniquePeriodicWork() WorkRequest 作为独特任务 (unique Work) 加入队列: class

1.6K30

Android Jetpack架构组件(七)之WorkManager

例如,仅在设备采用 Wi-Fi 网络连接、当设备处于空闲状态或者有足够存储空间再运行。 强大调度 WorkManager 允许开发者使用灵活调度窗口调度工作,以运行一次性或重复工作。...3.1.5 延迟工作 如果工作没有约束,并且所有约束都得到了满足,那么当工作入队系统可能会选择立即运行该工作。如果您不希望工作立即运行,可以工作指定为在经过一段最短初始延迟时间后再启动。...3.3 任务管理 3.3.1 唯一任务 在定义了Worker 和 WorkRequest之后,最后一步是工作入队列,工作入队最简单方法是调用 WorkManager enqueue() 方法...在工作入队需要注意避免重复加入问题,为了实现此目标,我们可以工作调度为唯一任务。 唯一任务可确保同一刻只有一个具有特定名称工作实例。...3.3.2 冲突解决策略 有时候,任务调度会出现冲突,此时我们需要告知 WorkManager 在发生冲突要执行操作,可以通过在工作入队传递一个枚举来实现此目的。

1.8K11
您找到你想要的搜索结果了吗?
是的
没有找到

AAC---WorkManager

而它主要作用则是管理在后台工作任务,即使APP没有启动,它也能保证任务可以被执行。...支持LiveData请求状态同步到UI 但是WorkManager仍然无法代替线程池、AsyncTask,例如以下例子都可以使用WorkManager:上传日志,实现图片滤镜并且保存图片,定期从网络同步本地数据...使用WorkManager 导入WorkManager 在appModule中导入KotlinWorkManager。而目前版本号已经到了1.0.0-alpha13。...加入队列中 在创建完任务后,需要将该任务加入WorkManager队列中。...链式任务 可以通过WorkManager.beginWith来开始执行任务,并且通过then来后续任务链接上。并且可以前一个任务输出作为后一个任务输入。

1K20

现代 WorkManager API 已发布

WorkManager 基础 API 从首个稳定版本发布以来,WorkManager 提供了一些基础 API,帮助您定义工作、放入队列、依次执行,且在工作完成通知您应用。...工作约束 WorkManager 支持对给定工作运行设定约束条件,约束 可确保工作延迟到满足最佳条件时运行。例如,仅在设备采用不按流量计费网络连接、当设备处于空闲状态或者有足够电量时运行。...由于所能安排工作存在配额限制,所以您需要表明当应用配额用尽该怎么处理,有两种备选方案: 其一是加急请求变成常规工作请求,其二是在配额耗尽放弃新工作请求。...(context).enqueue(request) △ RemoteWork 对象放入队列示例代码 组件名称是软件包名和类名组合,您需要将其添加到工作请求输入数据中,然后用这个输入数据创建工作请求...我们照常将工作入队列中,当 WorkManager 准备执行这项工作,它首先根据输入数据中定义内容找到绑定服务,并执行 doRemoteWork 方法。

1.2K20

WorkManager _Android新架构组件

它不适用于应用进程内后台工作,如果应用进程消失,就可以安全地终止,对于这种情况,推荐你使用线程池 2 WorkManager架构 ?...WorkManager提供了保证,即使您应用程序强制退出或设备重新启动,你任务仍会在特定条件匹配执行。 2....WorkManager使用LiveData来干会任务数据和状态,所以,你Activity可以观察这个LiveData,并且每当任务完成都会得到通知。...WorkRequest:它代表了工作调度请求。每个工作必须在安排工作之前创建工作请求。 WorkRequest包含工作唯一标识,约束条件说明应在哪种情况下执行任务。这是一个抽象类。...对象,然后使用WorkManager让这个任务入队: val compressionWork = OneTimeWorkRequestBuilder().build()

2.7K20

笔记之Android架构组件-WorkManager

所以,在不久将来,service使用范围会越来越小,取而代之,是谷歌推出技术:WorkManagerWorkManager工作触发器 满足, 运行可推迟后台工作。...如果在任务运行期间某个约束不再得到满足,则 WorkManager 停止工作器。当约束继续得到满足,系统重新尝试执行该任务。 2....每个唯一工作序列都有一个名字,WorkManager一次只允许一个工作序列使用该名称,当我们创建一个新唯一工作序列,如果已经有一个未完成序列具有相同名称,则指定WorkManager应执行操作...: 取消现有的序列并用新序列其替换 保持现有顺序并忽略新请求 新序列附加到现有序列,在现有序列最后一个任务完成后运行新序列第一个任务 如果我们有一个不应该多次入队任务,则唯一工作序列可能很有用...如果进程被杀死,或者不满足约束条件,那么WorkManager是不会运行。当约束继续得到满足,或者程序重新启动,系统重新尝试执行该任务。

87410

JetPack--WorkManager

WorkManager是用于后台执行任务工具,相比于Service、JobSchedule等,它拥有很低能耗,但是它不是立即执行任务,对于一些不需要及时完成任务,使用WorkManager是一个很好选择...WorkManager内部使用了数据库,所以能保证任务一定会执行。...WorkManager兼容性也很好,最低支持api14,api23以前,WorkManager内部是使用了JobSchedule,23以后使用是AlarmManager+BroadCastReceiver...,任务入队: //设置条件 Constraints constraints = new Constraints.Builder() //...(workRequest.getId()); 6.参数传递 参数传递分成两方面,一个是创建任务传入参数,一个是执行任务传递参数 使用Data在创建任务传入参数: //传入参数

63810

python线程池

其中涉及到了多线程问题,在后端使用一个全局字典用来保存和识别已经运行线程。但是觉得这样实现不是不太舒服。于是想找到一个更好实现,这就想到了线程池这个概念。 线程池概念是什么?...在Java中更是如此,虚拟机试图跟踪每一个对象,以便能够在对象销毁后进行垃圾回收。所以提高服务程序效率一个手段就是尽可能减少创建和销毁对象次数,特别是一些很耗资源对象创建和销毁。...根据IBM文档中描述,我理解为线程池是一个存放很多线程单位,同时还有一个对应任务队列。整个执行过程其实就是使用线程池中已有有限线程把任务队列中任务做完。...这样做好处就是你不需要为每个任务都创建一个线程,因为当你创建第100个线程来执行第100个任务时候,可能前面已经有50个线程结束工作了。因此重复利用线程来执行任务,减少系统资源开销。...jobs_num): for i in range(jobs_num): self.add_job(do_job, i) """ 添加一项工作入队

1.3K20

如何使用WorkManager执行后台任务(上)

底层使用,提供了简单且灵活易用API,它有很多优势: 支持异步一次性或周期任务 支持网络、存储空间以及电量状态等约束 可使用链式调用方式来执行任务,也包括并行任务处理 一个工作任务执行结果可以作为下一个任务输入...约束类是可以在使用 WorkRequest.Builder 创建时候进行传递给 WorkRequest。 WorkManager工作任务管理器,它是用于管理工作任务请求队列类。...通过上面的描述,可以简单画出下面的关系图: ? 0x02 实践篇——工作流 假设我们在开发一个图片相关APP,这个应用需要期地压缩它存储图片。我们使用 WorkManager来实现这个需求。...创建WorkRequest 使用 WorkRequest子类,根据具体业务创建对应请求实例。例如本例中,使用一次性任务来构建请求。然后把任务请求加入到 WorkManager管理队列中。... enqueue方法 WorkRequest加入队列。

1.5K20

跟上脚步,进入后台执行新时代

后台执行相关行为变更 在后台运行应用会消耗设备有限资源,如内存或者电池电量,进而影响用户使用体验,比如说,后台任务可能会缩短设备续航时间,或者在用户玩游戏、看视频或拍照造成系统卡顿。...以上传日志为例,您需要依次创建以下两个工作请求,才可以压缩后日志文件上传至服务器: 第一步:压缩文件。在此步骤中,您可以添加约束条件 “当设备充电,任务才可以被执行”。...任务编入队列后,WorkManager 会在约束条件满足情况下,即当应用可以访问所需资源,才会执行这两个任务。...如果任务由外部事件触发且运行时间较长,例如同步新数据,请先使用 Firebase Cloud Messaging 通知您应用,然后再调用 WorkManager 创建同步数据工作请求。...请注意:WorkManager 目前只发布了公共预览版,您可以继续使用 JobScheduler 作为替代方案,不过和 WorkManger 相比,JobScheduler 有更多局限。

2.5K30

工作笔记——使用Jest遇到一些问题

一,QUICK START遇到问题 首先,通过我们特别熟悉命令,哦对,前提是你要安装了node,git。还要全局安装vue-cli,后面会把版本信息贴上,这里不多说废话了。...嗯..你报错信息应该可能大概也许是下面这个样子:   这是我们在使用Jest遇到第一个问题,解决方式很简单,在test目录下jest.config.js配置中添加一项:   然后,再试一下...实际上在使用过程中,主要有两类问题,一个是环境配置问题,要记住在写jest测试用例时候,需要引入各依赖文件,就像在main.js中那样。...比如vue-router,vuex,axios使用方法等都是比较容易解决部分,在网上可以很简单搜到使用方法,我就不再重复去写了。...四、复杂环境下经常会遇到各种对象找不到情况,应该是jest测试环境配置问题,暂未解决。 最后,本文章为工作中遇到问题一些记录,以备查阅。若有错误不足,还望不吝指正,互相学习。

1.3K20

工作笔记——使用Jest遇到一些问题

一,QUICK START遇到问题 首先,通过我们特别熟悉命令,哦对,前提是你要安装了node,git。还要全局安装vue-cli,后面会把版本信息贴上,这里不多说废话了。...嗯..你报错信息应该可能大概也许是下面这个样子: ?   这是我们在使用Jest遇到第一个问题,解决方式很简单,在test目录下jest.config.js配置中添加一项: ?   ...实际上在使用过程中,主要有两类问题,一个是环境配置问题,要记住在写jest测试用例时候,需要引入各依赖文件,就像在main.js中那样。...比如vue-router,vuex,axios使用方法等都是比较容易解决部分,在网上可以很简单搜到使用方法,我就不再重复去写了。...jest官网和Vue Test Utils实际上说都比较清楚了。 最后,本文章为工作中遇到问题一些记录,以备查阅。若有错误不足,还望不吝指正,互相学习。

1.9K30

WorkManager 基础入门

WorkManager 是一个 Android Jetpack 库,当满足工作约束条件,用来运行可延迟、需要保障后台工作。对于许多类型后台工作WorkManager 是当前最佳实践方案。...在这篇博文中,我介绍: 将你后台任务定义为工作 定义特定工作应该如何运行 运行你工作 使用链进行存在依赖工作 监视你工作状态 我还将解释 WorkManager 幕后发生事情,以便你可以就如何使用它做出明智决定...如果你想使用 Java 依赖,那就移除“-ktx”。 定义你 work 做什么 在我们多个任务连接在一起之前,让我们关注如何执行一项工作。我将会着重细说上传任务。...我之前说过,如果 Worker 返回 Result.retry(),WorkManager 重新计划工作。你可以在创建新 WorkRequest 自定义退避条件。这允许你定义何时应重试运行。...WorkManager 虽然所有工作信息保存到数据库中有些麻烦,但它还是会做,这使得它成了非常适合需要保障执行任务。

14410

WorkManager 基础入门

WorkManager 是一个 Android Jetpack 库,当满足工作约束条件,用来运行可延迟、需要保障后台工作。对于许多类型后台工作WorkManager 是当前最佳实践方案。...在这篇博文中,我介绍: 将你后台任务定义为工作 定义特定工作应该如何运行 运行你工作 使用链进行存在依赖工作 监视你工作状态 我还将解释 WorkManager 幕后发生事情,以便你可以就如何使用它做出明智决定...如果你想使用 Java 依赖,那就移除“-ktx”。 定义你 work 做什么 在我们多个任务连接在一起之前,让我们关注如何执行一项工作。我将会着重细说上传任务。...我之前说过,如果 Worker 返回 Result.retry(),WorkManager 重新计划工作。你可以在创建新 WorkRequest 自定义退避条件。这允许你定义何时应重试运行。...WorkManager 虽然所有工作信息保存到数据库中有些麻烦,但它还是会做,这使得它成了非常适合需要保障执行任务。

92760

WorkManager 系列课程 | MAD Skills

在最后一集中,我们介绍了如何 GCMNetworkManager 和 FirebaseJobDispatcher 中旧代码迁移到 WorkManager。...首先,我们了解了如何定义想要完成工作,以及如何制定工作计划。接着,我们实现了一些不同类型工作,包括一次性工作和周期性工作。...在处理线程,您可以选择使用 Executor、coroutine 或 RxJava,而 Ben 使用 WorkManager 为您演示了每一种方法。...如果您应用仍然在使用这两个库,是时候将其更新,并且改用 WorkManager 了!...点击这里查看视频 第 5 集: Hugo 谈 WorkManager Android GDE Hugo Visser 谈论了他为何选择在自己最近开发一款健康应用中使用 WorkManager,以及该库为他开发工作带来了哪些帮助

32220

Android WorkManager: 轻松管理后台任务

介绍 在Android应用开发中,有效地管理后台任务是至关重要。Android WorkManager是一个强大库,旨在简化任务调度和后台工作管理。...本文深入探讨WorkManager内部实现细节、原理和具体使用。...工作原理 架构概述 WorkManager内部实现采用了现代化任务调度架构,分为以下几个核心组件: WorkManager: 提供任务调度和管理主要接口,负责协调任务执行。...调度流程 当开发者提交任务WorkManager首先会将任务信息存储到WorkDatabase中,包括任务状态、约束条件等。...在创建OneTimeWorkRequest,可以使用setInputData方法设置输入数据,确保任务执行时有足够信息。

33320

WorkManager 在多进程应用中高级用法

WorkManager 2.5 中,我们让多进程应用能够更容易地访问在指定进程中运行特定 WorkManager 实例。...虽然大多数应用只需要一个进程就能良好地工作,但有些应用则需要多个进程来完成它们工作,这在过去很难管理不同进程之间工作,但现在一切都不一样了!...从 WorkManager 2.6 开始,您可以使用 RemoteListenableWorker 或 RemoteCoroutineWorker Worker 绑定到特定进程。...RemoteCoroutineWorker 实现起来和 CoroutineWorker 很相像,但不用覆写 doWork,而是覆写 do**Remote**Work,并在生成 WorkRequest ... 您可以在新 WorkManager 多进程示例 中了解这些新功能如何工作,它同时使用 RemoteCoroutineWorker 和 RemoteListenableWorker

54120

Android Studio 对现代 WorkManager 支持

在 上一篇文章 中,我们提到了现代 WorkManager API 对工具支持方面也进行了改进,本文我们结合实际案例来看看具体有哪些改进。如果您更喜欢通过视频了解此内容,请 点击此处 查看。...后台任务检查器是应用检查套件一部分,它针对应用几个方面提供更丰富详细信息。为了充分利用检查器,您应用需要使用 WorkManager 2.5 或更新版本。...△ 使用 WorkManagerSample 应用和应用检查器面板 现在 CleanupWorker 已经完成,队列中其他 Worker 也按照次序运行。...输出数据包含着每个 Worker 唯一标识符,会按照队列顺序进行传递。 △ 演示 Worker 执行失败场景 这里为您展示当工作链中某个 Worker 执行失败场景。...WorkManager 文档: 使用 WorkManager 调度任务 Codelab: 使用 WorkManager 处理后台任务 Codelab: WorkManager 进阶知识 WorkManager

44120
领券