首页
学习
活动
专区
工具
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.2K10

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向用户显示此信息

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

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

    1.9K70

    WorkManager: 周期性任务

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

    1.9K30

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

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

    1.9K20

    Jetpack WorkManager 看这一篇就够了~

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

    1.6K20

    笔记之Android架构组件-WorkManager

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

    91210

    WorkManager 基础入门

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

    21310

    WorkManager 基础入门

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

    99060

    现代 WorkManager API 已发布

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

    1.3K20

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

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

    49920

    Android 多线程技术哪家强?

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

    96930

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

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

    87920

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

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

    68120

    Java面试题3:Java异常篇

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

    9410

    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 粒度 语句级读一致性 事务级读一致性 准确性 每次语句执行时间点的数据 第一条语句执行时间点的数据 并发事务带来哪些问题...并发事务可能造成:脏读、不可重复读和幻读等问题 ,这些问题其实都是数据库读一致性问题,必须由数据库提供一定的事务隔离机制来解决,解决方案如下: 加锁:在读取数据前,对其加锁,阻止其他事务对数据进行修改。

    17920

    解锁动静态库的神秘力量2:从代码片段到高效程序的蜕变(续篇)

    一·ELF文件: 1.1ELF文件概念: 首先我们要先命名它是什么;然后下面再介绍它的组成。 就是xxx.o⽂件;包含适合于与其他⽬标⽂件链接来创建可执⾏⽂件或者共享⽬标⽂件的代码和数据。...可以分为一下几种: 1· 可执⾏⽂件(Executable File) :即可执⾏程序。 2·共享⽬标⽂件(Shared Object File) :即xxx.so⽂件。...介绍一下_start函数: 在C/C++程序中,当程序开始执⾏时,它⾸先并不会直接跳转到 main 函数。...运行时找相应的got表:由于GOT表与 .text 的相对位置是固定的,我们完全可以利⽤CPU的相对寻址来找到GOT表。...内存占用多:多进程运行时,各程序都占一份库代码内存,浪费资源。

    8610

    Effective Java 2.0_中英文对照_Item 6

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

    27620
    领券