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

WorkManager/PeriodicWorkRequest -当SO阻止其中之一的执行时,下一步工作会发生什么?

WorkManager是Android Jetpack中的一个组件,用于管理和调度后台任务。PeriodicWorkRequest是WorkManager中的一个类,表示一个周期性执行的后台任务。

当SO(系统优化器)阻止其中一个Work请求的执行时,下一步工作会根据WorkRequest的约束条件来执行。PeriodicWorkRequest可以设置以下约束条件:

  1. setRequiresBatteryNotLow(boolean):要求设备电池电量充足;
  2. setRequiresCharging(boolean):要求设备正在充电;
  3. setRequiresDeviceIdle(boolean):要求设备处于空闲状态;
  4. setRequiredNetworkType(NetworkType):要求特定的网络类型(如连接WiFi);
  5. setRequiresStorageNotLow(boolean):要求设备存储空间充足。

如果SO阻止了一个Work请求的执行,那么下一个Work请求会在满足所有约束条件的情况下开始执行。如果所有约束条件都无法满足,则Work请求将等待满足条件后再执行。

对于WorkManager和PeriodicWorkRequest的更详细的说明和示例,可以参考腾讯云产品文档中的相关内容:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Jetpack组件之WorkManager

WorkManager可以自动维护后台任务行时机,执行顺序,执行状态。...//任务行时间间隔定为一小时 PeriodicWorkRequest saveRequest = new PeriodicWorkRequest.Builder(SaveImageToFileWorker.class...工作器的确切执行时间取决于您在 WorkRequest 对象中设置约束以及系统执行优化。 需要注意是定义最短重复间隔是 15 分钟,在源码中也可以看到。...利用contentObserver监控传递进来这个uri对应内容是否发生变化,且仅发生变化了 //设置从content变化到被执行中间延迟时间,如果在这期间。...(tag); WorkManager.getInstance(this).getWorkInfosForUniqueWorkLiveData(workName); 通过LiveData,我们便可以在任务状态发生变化时收到通知

1.1K10

Android Jetpack架构组件(七)之WorkManager

例如,仅在设备采用 Wi-Fi 网络连接时、设备处于空闲状态或者有足够存储空间时再运行。 强大调度 WorkManager 允许开发者使用灵活调度窗口调度工作,以运行一次性或重复工作。...existingWorkPolicy:此 enum 可告知 WorkManager 如果已有使用该名称且尚未完成唯一工作链,应执行什么操作。如需了解详情,请参阅冲突解决政策。...3.3.2 冲突解决策略 有时候,任务调度会出现冲突,此时我们需要告知 WorkManager发生冲突时要执行操作,可以通过在将工作加入队列时传递一个枚举来实现此目的。...添加任务约束条件不再适合。 系统出于某种原因指示应用停止工作。 任务停止后,WorkManager 会立即调用 ListenableWorker.onStopped()关闭可能保留所有资源。...3.6 观察任务进度 WorkManager 2.3.0为设置和观察任务中间进度提供了支持,如果应用在前台运行时,工作器保持运行状态,那么也可以使用WorkInfo LiveData Api向用户显示此信息

1.9K11
  • Android Jetpack - 使用 WorkManager 管理后台任务

    作为 Android Jetpack 中新组件,WorkManager 负责用来管理后台任务,它和一个异步任务以及 Service 有什么区别呢?看完你就知道了。...这是 WorkManager 另一个特点,一旦发起一个任务,任务是可以保证一定会被执行,就算退出应用,甚至重启手机都阻止不了他。但可能由于添加了环境约束等原因,它执行时间是不确定。...具体是什么方式和 Android 版本和依赖环境有关: 定时任务 前面说了 OneTimeWorkRequest 是指任务只需要执行一遍,而 PeriodicWorkRequest 则可以发起一个多次执行定时任务...如果是 PeriodicWorkRequest,我想到办法是每次执行之前,根据标签去取消已有的任务。 以上,就是本文对 WorkManager 简单介绍和用法讲解。 保活?...基本上,WorkManager 能做,Service 也能做,我并没有想到有什么情况是非用 WorkManger 不可

    1.8K70

    WorkManager: 周期性任务

    您在周期性任务 Woker 中调用 Result#success() 或 Result#failure() 时,周期性任务会回到 ENQUEUED 状态并等待下一次执行。...不论是什么,常见模式都是需要在应用启动第一时间将这些任务入队。 我已经看到这种模式几次,在 Application#onCreate 方法中,开发者创建了 WorkRequest 并将其入队。...选择哪种策略取决于您在 Worker 中执行什么操作。...如果您选择使用 REPLACE 策略,您 Worker 应当适当地处理停止状态,因为这种策略下,如果一个新 WorkRequest 在 Worker 正在运行时加入队列,WorkManager 就可能不得不取消正在运行实例...不过您也应该在任何情况下都处理好停止状态,因为 Worker 正在被执行时,如果某个约束条件不再被满足,WorkManager 也可能会停止您任务。 有关独特任务更多信息,请参阅文档:唯一工作。

    1.8K30

    WorkManager从入门到实践,有这一篇就够了

    2 WorkManager WorkManager什么?...其实本质是WorkManager结合了Room,将数据保存在数据库中。 这一步要点就是这么多,下面进入下一步。...4 配置WorkRequest WorkManager主要是通过WorkRequest来配置任务,而它WorkRequest种类包括: OneTimeWorkRequest PeriodicWorkRequest...由于篇幅有限,这里就不一一展开,感兴趣可以查看源码 4.2 PeriodicWorkRequest PeriodicWorkRequest是可以周期性执行任务,它使用方式与配置和OneTimeWorkRequest...: 有相同name且未完成链式请求时,链式请求保持不变 APPEND: 有相同name且未完成链式请求时,将新链式请求追加到原来子队列中,即原来链式请求全部执行后才开始执行。

    1.8K20

    Jetpack WorkManager 看这一篇就够了~

    什么WorkManager 按照官方描述,WorkManager 是适合用于持久性工作推荐解决方案。如果工作始终要通过应用重启和系统重新启动来调度,便是持久性工作。...可延期 一次性或定期 PeriodicWorkRequest 和 Worker。 接下来来看具体使用方法。...枚举值 含义 RUN_AS_NON_EXPEDITED_WORK_REQUEST 系统无法为任务加急处理时,任务变成常规任务 DROP_WORK_REQUEST 系统无法为任务加急处理时,删除该任务...如果未能实现对应 getForegroundInfo 方法,那么在旧版平台上调用 setExpedited 时,可能会导致运行时崩溃。...NetworkType 约束运行工作所需网络类型。例如 Wi-Fi (UNMETERED)。 BatteryNotLow 如果设置为 true,那么设备处于“电量不足模式”时,工作不会运行。

    1.5K20

    笔记之Android架构组件-WorkManager

    发生变化时候运行 .setRequiresDeviceIdle(true)//设备处于空闲状态时运行 .setRequiresCharging(true...如果在任务运行期间某个约束不再得到满足,则 WorkManager 将停止工作器。约束继续得到满足时,系统将重新尝试执行该任务。 2....这个很好理解,假如任务一直执行失败,不断地重新执行也没什么意义,只会徒增设备性能消耗。而随着失败次数增多,下次重试时间也应该进行适当延迟。...如果发生冲突,它会覆盖先前设置键。 // ArrayCreatingInputMerger 会尝试合并输入,并在必要时创建数组。...如果进程被杀死,或者不满足约束条件时,那么WorkManager是不会运行约束继续得到满足时,或者程序重新启动时,系统将重新尝试执行该任务。

    90310

    WorkManager 基础入门

    WorkManager 是一个 Android Jetpack 库,满足工作约束条件时,用来运行可延迟、需要保障后台工作。对于许多类型后台工作,WorkManager 是当前最佳实践方案。...在第一篇博文中,我们讨论了 WorkManager什么以及何时使用 WorkManager。...在这篇博文中,我将介绍: 将你后台任务定义为工作 定义特定工作应该如何运行 运行你工作 使用链进行存在依赖工作 监视你工作状态 我还将解释 WorkManager 幕后发生事情,以便你可以就如何使用它做出明智决定...调用 enqueue 来启动 WorkManager 跟踪和调度工作整个过程。 在幕后 —— 工作是怎么运行 那么,WorkManager 能为您做些什么呢?...稍后,满足 WorkRequest Constraints 时(可以立即发生),Internal TaskExecutor 会告诉 WorkerFactory 创建一个 Worker。

    20610

    WorkManager 基础入门

    WorkManager 是一个 Android Jetpack 库,满足工作约束条件时,用来运行可延迟、需要保障后台工作。对于许多类型后台工作,WorkManager 是当前最佳实践方案。...在第一篇博文中,我们讨论了 WorkManager什么以及何时使用 WorkManager。...在这篇博文中,我将介绍: 将你后台任务定义为工作 定义特定工作应该如何运行 运行你工作 使用链进行存在依赖工作 监视你工作状态 我还将解释 WorkManager 幕后发生事情,以便你可以就如何使用它做出明智决定...调用 enqueue 来启动 WorkManager 跟踪和调度工作整个过程。 在幕后 —— 工作是怎么运行 那么,WorkManager 能为您做些什么呢?...稍后,满足 WorkRequest Constraints 时(可以立即发生),Internal TaskExecutor 会告诉 WorkerFactory 创建一个 Worker。

    97360

    现代 WorkManager API 已发布

    虽然从技术角度,我们设计 WorkManager 核心思想仍然是正确,但对于日益复杂发生态而言,WorkManager 能力已经大大超过我们设计预期。...WorkManager 在全局作用域中执行您定义 Worker,这意味着只要您应用还在运行,不论是设备方向变化,还是 Activity 被回收等,您工作会被一直留存。...执行需要长时间运行工作 WorkManager 2.3 版本引入了对长时间运行工作支持。当我们谈到长时间运行工作时,指的是运行时间超过 10 分钟执行窗口期工作。...多进程初始化 △ 多进程初始化过程 接着我们再看看如果应用有第二个进程会发生什么。假如应用有第二个进程,基本上它会重复在第一个进程中完成各项操作。...总结 WorkManager 是应对长执行时间工作推荐方案,推荐您使用 WorkManager 实现请求和取消长时间运行工作任务。

    1.3K20

    Android 多线程技术哪家强?

    同样,这些总结下来方案都是我自己个人心得体会,本人水平有限,有什么不对或者意见不同欢迎大家讨论或者吐槽。 Trade Off 今天我想先说一个英文单词,叫Trade Off。...竖轴从上往下分别是Exact Timing(准确时间点)还有Deferrable(可以被延迟).这张图分别从在多线程下执行代码可执行性和执行时间来把框架分成了四个维度。...上图中,简洁来说,APP进入后台之后,异步任务被限制很死。那么作为谷歌自己研制WorkManager,一个号称app关掉之后还能重启异步任务这么吊炸天框架当然也要遵循这个规则。...所以,所谓延迟,并不是那么吓人,笔者亲测,在App还在前台时候执行WorkManager,异步任务基本上还是马上会进入调度执行,但是app进入后台之后,WorkManager就会尝试暂停任务。...复杂度Trade Off 上面的篇幅我都在从谷歌官方解释,也就是从执行时间,和能否保证任务完整执行维度来审视我们现有的解决方案。接下来我想从代码复杂角度来聊聊。

    96030

    应用启动性能 | 介绍 App Startup 库

    最近我开始尝试使用 AndroidX 应用启动 (App Startup) 库。在这个库发 布了 1.0 版本 之后,我觉得是时候深入理解一下为什么需要、什么时候以及如何使用这个库。...有需要访问该 content provider 时候,系统需要该应用能够处于就绪状态,所以系统会在应用启动时候自动运行 content provider。...这些细节对于仅仅调用这些库开发者都是不可见,因为具体实现都隐藏在自动生成代码中。您需要查看 合并后 manifest 文件 来理解这一切是如何发生。...也正是这个合并后 manifest 文件告诉我们库 content provider 究竟发生什么。 让我们来看一个具体例子。...同时,锁定时钟频率还通常会造成更长行时间 (由于更低频率),这也会帮助我们降低由于过短运行时间造成噪音数据。

    49320

    如何清晰地掌握 Android 应用中后台任务执行情况?

    Android Studio 包含了许多像 布局检查器 和 数据库检查器 这样检查器,来帮助您调查并了解应用在运行时内部状态。...让我们通过一个示例项目来看看后台任务检查器能做些什么。...稍等一会儿该应用就会展示应用了所选滤镜图片。在不了解示例应用情况下,来看看我还能通过后台任务检查器知道些什么。...Worker 数量根据用户选择滤镜情况可能有所不同。 这是个很棒功能,但您面对不熟悉应用时不一定能想象出工作链。而后台任务检查器另一个很棒特性就是它能够以图形化形式展示工作链。...现在假设我想测试一个 Worker 停止时会发生什么

    85520

    Android 应用启动性能 | 延迟初始化

    偷个懒...如果您想的话 优化应用启动性能时候,我们不能改变那些无法控制代码实现。所以这里思路并不是加速我们使用库初始化,而是控制这些库什么时候以及如何被初始化。...如果是这样的话,为什么要因为只在某个特殊代码路径中需要而在应用启动时花时间初始化一个很大库呢?为什么不等到这个库真正被需要时候再引入相关初始化开销呢?...这样在应用启动时候就不会有任何 content provider 初始化发生,而完全由您来决定什么时候应该触发相关初始化。...您能否利用应用启动库从合并 manifest 文件中移除一些甚至所有这些 content provider,并观察它如何影响启动时间?您能否在实现这个同时不影响运行时行为呢?...(值得注意是: 您需要保证在应用开始依赖相关库功能之前,确保初始化它们。) 最后,尽情享受性能测试和优化。我会继续找寻更多分析和优化应用性能办法,如果发现什么有价值东西我会发布相关内容。

    66720

    Java面试题3:Java异常篇

    1、finally 块中代码什么时候被⾏? 答: 在 Java 语⾔异常处理中,finally 块作⽤就是为了保证⽆论出现什么情况,finally 块⾥代码⼀定会被⾏。...下⾯列举两种⾏不到情况: (1)程序进⼊ try 块之前就出现异常时,会直接结束,不会⾏ finally 块中代码; (2)程序在 try 块中强制退出时也不会去⾏ finally 块中代码...答: 所谓异常是指程序在运行过程中发生一些不正常事件。...特点 : 和运行时异常一样,编译器也不会对错误进行检查。资源不足、约束失败、或是其它程序无法继续运行条件发生时,就产生错误。程序本身无法修复这些错误。...答: JAVA程序违反了JAVA语义规则时,JAVA虚拟机就会将发生错误表示为一个异常。违反语义规则包括2种情况。一种是JAVA类库内置语义检查。

    8510

    20道前端高频面试题(附答案)

    错误发生时,需修改请求内容后再次发送请求。另外,浏览器会像 200 OK 一样对待该状态码。...(4)504 Gateway Timeout该状态码表示网关或者代理服务器无法在规定时间内获得想要响应。他是HTTP 1.1中新加入。使用场景:代码执行时间超时,或者发生了死循环。5....阻塞是指cssom树建立好之后才会进行下一步解析渲染通过以下手段可以减轻cssom带来影响将script脚本放在页面底部尽可能快加载css样式表将样式表按照media type和media query...事件流阻止在一些情况下需要阻止事件流传播,阻止默认动作发生event.preventDefault():取消事件对象默认动作以及继续传播。...总结就以下四点:不保证消息交付:不确认,不重传,无超时不保证交付顺序:不设置包序号,不重排,不会发生队首阻塞不跟踪连接状态:不必建立连接或重启状态机不进行拥塞控制:不内置客户端或网络反馈机制什么是 XSS

    1K30

    2024年java面试准备--mysql(2)

    所有的事务依次逐个⾏,这样事务之间就完全不可能产⽣⼲扰。...在一个事务中前后两次读取结果并不致,导致了不可重复读。 3、幻读:是指当事务不是独立执行时发生一种现象,例如第一个事务对一个表中数据进行了修改,这种修改涉及到表中全部数据行。...,自然不会因为并发有什么影响了,但是性能会下降许多。...RC RR 实现 多条查询语句会创建多个不同ReadView 仅需要一个版本ReadView 粒度 语句级读一致性 事务级读一致性 准确性 每次语句执行时间点数据 第一条语句执行时间点数据 并发事务带来哪些问题...并发事务可能造成:脏读、不可重复读和幻读等问题 ,这些问题其实都是数据库读一致性问题,必须由数据库提供一定事务隔离机制来解决,解决方案如下: 加锁:在读取数据前,对其加锁,阻止其他事务对数据进行修改。

    17420

    Effective Java 2.0_中英文对照_Item 6

    当你从一个手动管理内存语言(例如C或C++)转到一个具有垃圾回收机制语言时,作为一个程序员你工作会更容易,当你使用完对象时,它们会被自动回收。当你第一个经历它时,它简直不可思议。...即使只无意保留了几个对象引用,但可能阻止了垃圾回收机制回收许多其它对象,在性能上会有很大潜在影响。...程序员第一次被这个问题困扰时,他们可能是过分小心了,程序一旦完成了对象使用,就清空每一个对象引用。这既没必要也不可取,因此它会将程序不必要弄乱。清空对象引用应该是例外情况而不是正常行为。...消除废弃引用最好方式是让包含引用变量结束其作用域。如果你在最紧凑作用域范围内定义每个变量,这会很自然发生So when should you null out a reference?...因此,在它们发生阻止它们发生之前,就学习预测这种问题是很有必要

    26320

    什么各大厂自研内存泄漏检测框架都要参考 LeakCanary?因为它是真强啊!

    认识 LeakCanary 1.1 什么是内存泄漏? 内存泄露(Memory Leaks)指不再使用对象或数据没有被回收,随着内存泄漏堆积,应用性能会逐渐变差,甚至发生 OOM 奔溃。...因为内存泄漏堆积而内存不足时,应用可能从任何一次无关紧要内存分配中抛出 OOM,堆栈日志只能体现最后一次内存分配堆栈信息,而无法体现出导致发生 OOM 主要原因。...) 行时机,拿到暂存 Service 对象交给 ObjectWatcher 监控。...在以上步骤中,对象使用生命周期结束后,会交给 ObjectWatcher 监控,现在我们来具体看下它是怎么判断对象发生泄漏。...内部发生内存泄漏。

    1.1K10
    领券