再比如您想将一段精彩的 Vlog 分享到社交媒体,肯定也会希望视频上传时不会影响到自己继续使用设备。这就涉及到了我们今天分享的主题: 使用 WorkManager 管理后台和前台工作。...WorkManager 基础 API 从首个稳定版本发布以来,WorkManager 提供了一些基础 API,帮助您定义工作、放入队列、依次执行,且在工作完成时通知您的应用。...工作约束 WorkManager 支持对给定工作运行设定约束条件,约束 可确保将工作延迟到满足最佳条件时运行。例如,仅在设备采用不按流量计费的网络连接时、当设备处于空闲状态或者有足够的电量时运行。...下载完成后,Worker 只需要返回成功即可,随后 WorkManager 会将 Worker 的执行与前台服务解耦分离、清理通知消息,并在必要时结束相关的服务。...当此 Intent 被触发时,它会向 WorkManager 发送取消工作的信号,从而实现取消工作的目的。 接下来就要生成带有自定义动作的通知消息了。
3 WorkManager API的特点 根据官方文档显示为以下几点: 1. 易于调度 WorkManager API可以轻松创建可延迟的异步任务,并允许您指定应该何时执行。...WorkManager提供了保证,即使您的应用程序强制退出或设备重新启动,你的任务仍会在特定条件匹配时执行。 2....WorkManager使用LiveData来干会任务的数据和状态,所以,你的Activity可以观察这个LiveData,并且每当任务完成时都会得到通知。...androidx.work 包中,但目前依赖于 Support Library 27.1 以及相关的 Arch组件版本,将来会发布带有 AndroidX 依赖项的WorkManager版本。...().cancelByWorkId(compressionWorkId); WorkManager 会尽最大努力取消任务,但实质上这是不确定的 - 当我们尝试取消任务时,任务可能已经运行或完成。
02 PART 缓存效率 从低延迟和标准延迟的HLS和DASH客户端混合使用时在边缘的缓存效率开始,它们都播放相同的内容。缓存是CDN扩展支持HTTP的流的方法。...图3 我们特别感兴趣的是当面对由PRELOAD HINT条目指定的开放范围请求时的预期起始点行为。...请注意,仅当范围请求的start-byte-pos不为零时才需要此约定。如果所请求的范围从零开始,则可以使用标准(非范围)GET请求,因为源自然会提供聚合响应。 到这里再次考虑播放启动行为。...07 PART 段结构 LL-HLS起源的早期版本产生的部件都是独立的(即每个部件都包含一个关键帧),然后具有带有单个关键帧的连续段,如图10所示。 ?...图21 中间的面板属于旧式延迟播放器,并且始终落后于其他两个播放器的完整部分,这两个延迟播放器均具有低延迟并在仍在生产时拉动对象。
但不合理的使用这些API,会造成消耗大量电量。JetPack中的WorkManager为应用程序执行后台任务提供了 一个统一的解决方案。...这也是Android的碎片化所导致的,许多厂商修改了手机ROM,造成不能得到执行,因此,分析需求是否可以使用WorkManager。...OneTimeWorkRequest 对于无需额外配置的简单工作,请使用静态方法 from。...超过这个时间,这个结果就会被存储到数据库中 //下次想要查询该任务的结果时,会触发workmanager的数据库查询操作,可以通过uuid来查询任务的状态...(tag); WorkManager.getInstance(this).getWorkInfosForUniqueWorkLiveData(workName); 通过LiveData,我们便可以在任务状态发生变化时收到通知
在工作器中调用 setForeground() 来处理通知。 可延期 一次性或定期 PeriodicWorkRequest 和 Worker。 接下来来看具体的使用方法。...这样我们就完成了一个最简单的WorkManager使用案例。接着我们来进一步的探索。...() 方法可让 WorkManager 在您调用 setExpedited() 时显示通知。...延迟执行 延迟执行适用于一次性任务和定时任务,但应用在定时任务事时对第一次执行有效,为啥呢?...所以在第4小节中,默认Android12上并不会显示通知栏 WorkManager 只是一个处理定时任务的工具 WorkManager 最早兼容到 API 14(Android 4.0)
方法以显示新服务的用户可见通知。...所以,在不久的将来,service的使用范围会越来越小,取而代之的,是谷歌推出的新的技术:WorkManager。 WorkManager在工作的触发器 满足时, 运行可推迟的后台工作。...第一个参数可选值有两种,分别是LINEAR和EXPONENTIAL,前者表示下次重试时间以线性的方式延迟,后者代表下次重试时间为指数的方式延迟。...每个唯一的工作序列都有一个名字,WorkManager一次只允许一个工作序列使用该名称,当我们创建一个新的唯一工作序列时,如果已经有一个未完成的序列具有相同的名称,则指定WorkManager应执行的操作...如果进程被杀死,或者不满足约束条件时,那么WorkManager是不会运行的。当约束继续得到满足时,或者程序重新启动时,系统将重新尝试执行该任务。
所以同步不需要通知用户,应在后台静默进行,而您可以用 WorkManager (当 WorkManager 达到稳定版本后,将是最为推荐的后台处理解决方案。)...对此,我们推荐将 FCM 消息与 WorkManager 或 JobScheduler API 配合使用。 如果您需要发布有丰富媒体内容的通知,我们推荐您先用 FCM 消息中的部分内容发布通知。...Android 9 Pie 也会在开启省电模式时强制限制后台执行。当使用普通优先级的 FCM 消息时,启动后台服务会导致 IllegalStateException。...FCM 针对 Doze 进行了优化,您可使用高优先级 FCM 消息立即通知用户。在 Doze 模式,普通优先级消息被延迟至维护窗口。这一功能让系统能在设备空闲时省电,但同时确保用户收到时效性强的通知。...总之,应仅在传递时效性强的通知给用户时,才使用高优先级 FCM 消息。这样可以确保这些消息和后续的高优先级消息能够及时送达用户且不被降级。
一、WorkManager的使用和原理 1.1 使用方法 WorkManager是Android Jetpack的一部分,它提供了一种简单的方法来执行后台任务。...WorkManager 根据设备的 API 级别选择合适的调度策略。对于 API 级别为 23 及以上的设备,WorkManager 使用 JobScheduler 进行任务调度。...3.1 网络优化 网络优化是提高后台网络任务性能的关键。在网络状况良好时,我们可以选择TCP协议,它提供了可靠的数据传输,但在网络状况不佳时,TCP协议的重传机制可能会导致延迟。...此时,我们可以选择UDP协议,虽然它不保证数据的可靠传输,但能够降低延迟。 另外,我们还可以根据网络状况动态调整传输速率。...为实现节能和网络优化,我们设定了任务在设备充电并连接 Wi-Fi 时执行。 使用 WorkManager:它自动执行满足约束条件的任务,无需关注设备 API 级别。
例如,仅在设备采用 Wi-Fi 网络连接时、当设备处于空闲状态或者有足够的存储空间时再运行。 强大的调度 WorkManager 允许开发者使用灵活的调度窗口调度工作,以运行一次性或重复工作。...3.1.5 延迟工作 如果工作没有约束,并且所有约束都得到了满足,那么当工作加入队列时系统可能会选择立即运行该工作。如果您不希望工作立即运行,可以将工作指定为在经过一段最短初始延迟时间后再启动。...3.1.6 重试和退避政策 如果需要让WorkManager重试工作,可以使用工作器返回 Result.retry(),然后系统将根据退避延迟时间和退避政策重新调度工作。...3.3.2 冲突解决策略 有时候,任务的调度会出现冲突,此时我们需要告知 WorkManager 在发生冲突时要执行的操作,可以通过在将工作加入队列时传递一个枚举来实现此目的。...(workQuery); 上面代码的作用是查找带有“syncTag”标记、处于 FAILED 或 CANCELLED 状态,且唯一工作名称为“preProcess”或“sync”的所有任务。
WorkManager 是一个 Android Jetpack 库,当满足工作的约束条件时,用来运行可延迟、需要保障的后台工作。对于许多类型的后台工作,WorkManager 是当前的最佳实践方案。...这个例子如上图所示 这个例子正是具有以下特点的任务: 可延迟的,因为你不需要它立即执行,而且实际上可能希望等待某些约束被满足(例如等待网络连接)。...添加 WorkManager 依赖 本文使用 Kotlin 书写代码,使用 KTX 库(KoTlin eXtensions)。KTX 版本的库提供了 扩展函数 为了更简洁和习惯的使用 Kotlin。...所以在这样的情况下,不要使用 WorkManager —— 坚持使用像 Kotlin 协程那样轻量的东西或创建自己的 Executor。...WorkInfo 更改时进行监视并被通知的能力是 LiveData 提供的功能。 工作有一个由不同 State 代表的生命周期。
对于绝大部分后台执行任务来说,使用 WorkManager 是目前 Android 平台上的最佳实践。...WorkManager使用起来也非常简单,因为我这边定时任务的频率在1分钟以内,如果不是因为最小间隔是15分钟的原因,就全部使用WorkManager了,直接代码开始。...Result 会通知 WorkManager 服务工作是否成功,以及工作失败时是否应重试工作。...设置重试和退避策略 将输入数据传递给工作 使用标记将相关工作分组在一起 WorkRequest 对象包含 WorkManager 调度和运行工作所需的所有信息。...5秒钟,结果运行起来后,5秒是不起作用的,还是间隔的15分钟,效果如下图: 总的来说其实WorkManager还是挺不错的,简单,方便,可以多任务,如果不是对间隔时间要求短,推荐使用WorkManager
WorkManager是用于后台执行任务的工具,相比于Service、JobSchedule等,它拥有很低的能耗,但是它不是立即执行任务的,对于一些不需要及时完成的任务,使用WorkManager是一个很好的选择...WorkManager内部使用了数据库,所以能保证任务一定会执行。...WorkManager的兼容性也很好,最低支持api14,api23以前,WorkManager内部是使用了JobSchedule,23以后使用的是AlarmManager+BroadCastReceiver...使用WorkManager需要添加gradle依赖: implementation 'androidx.work:work-runtime:2.5.0' 1.使用WorkManager 定义Work类...(workRequest.getId()); 6.参数传递 参数传递分成两方面,一个是创建任务时传入参数,一个是执行任务时传递参数 使用Data在创建任务时传入参数: //传入参数
作者 / Yacine Rezgui 应用启动时间是应用性能的关键衡量指标。应用启动后,用户期望能够得到快速响应并加载内容,当不符合预期时用户会感到失望。...这种糟糕的体验可能会导致用户在 Play 商店上对您的应用给予低分数的评价,甚至不会再次使用。 Jetpack App Startup 库在应用启动时以一种简单、高效的方法来初始化组件。...这往往通过使用 ContentProvider 来实现不同依赖的初始化。...延迟初始化 我们强烈推荐您使用延迟初始化来进一步提升启动性能,您可以通过如下方式实现组件的延迟初始化,在 条目下为 Initializer 增加 tools:node="remove...); 至此,您的应用已经延迟初始化该组件了。
在 v2.1-alpha02 之前,无法在创建 PeriodicWorkRequest 时设置初始延迟 在与他人的讨论中,我遇到的一些常见问题与周期性任务有关。...,您的 Work 在增加了一些额外延迟之后仍可以被执行。...目前,如果您需要在每天的大致同一时间执行某一个 Worker,那么最好的选择是使用 OneTimeWorkRequest 并设置初始延迟,这样您便可以在正确的时间执行任务: val currentDate...我只会在有恰当理由时才会使用 REPLACE 策略,比如,当我想要在某个 Worker 的 doWork() 方法中对它自己重新排期时。...使用 WorkManagerTestInitHelper,您可以在测试您的 Worker 类时模拟延迟、约束条件和周期要求被满足等情况。
这种需求你应该使用ThreadPool”。 WorkManager实例 1....然后使用WorkManager将WorkRequest对象入列。...你不用说应用被杀了, 就是你退出了这个注册的Activity, 你都收不到LiveData的通知. 所以说你的应用被杀, 任务又执行完了时, 是没有UI通知的, 更不会强行启动你的启动。...5,插入任务时, 已经有相同的任务时, 怎么办? WorkManager可以用beginUniqueWork()来执行唯一工作队列(“unique work sequence”)....若有任务有重复时, 怎么办? 这个主要是一个ExistingWorkPolicy类。这个类也是WorkManager包中的类,它其实是一个Enum。
使用应用启动库实现延迟初始化 现在我们已经知道该如何使用应用启动库实现自动加载以及初始化库。接下来让我们更进一步地来看看,如果您不想在启动的时候初始化,该如何实现延迟初始化。...我统计了不带任何库、带 WorkManager (使用默认自动生成的 content provider)、在启动时使用应用启动库自动初始化 WorkManager 以及使用 AppInitializer...延迟初始化 WorkManager 和应用启动库。...Startup 加载: 1315 ms 带 WorkManager (延迟加载): 1268 ms 最后,我统计了利用 AppInitalizer 手动初始化 WorkManager 的耗时: 利用...同时延迟初始化 WorkManager 让我可以 "节省" 大约 51 毫秒的时间。 这个差别是否足够明显到您需要担心呢?答案永远是 "看情况而定"。
无论是 Google 提供的库还是第三方库,启动时运行一些初始化逻辑并不少见,例如 WorkManager 在应用启动时使用 ContentProvider 进行初始化,来看一下 Google 工程师...刚才我们说到无论是 Google 提供的库还是第三方库,App 启动运行时会初始化一些逻辑,它们为了方便开发者使用,避免开发者手动调用,使用 ContentProvider 进行初始化,例如 WorkManager...在应用启动时使用 ContentProvider 进行初始化,我们来看一下 WorkManager 的源码,先来看一下 AndroidManifest.xml 文件内容。......... // 省略了没用的代码 } 如上所见其实就是在 WorkManagerInitializer 的 onCreate() 方法里面,使用默认配置初始化 WorkManager...如何正确使用 AndroidX App Startup? 使用 AndroidX App Startup 来运行所有依赖项的初始化有两种方式: 自动初始化。 手动初始化(也是延迟初始化)。
to run immediately 也就是说,WorkManager主要目的是为了那些允许/可以忍受延迟的异步任务而设计的。...这个可以忍受延迟就很玩味了。有谁会想要无目的的延迟自己想要运行的异步任务的?这个问题的答案其实也是安卓用户一直关心的电池续航。 安卓在经历了初期的大开大方之后,开始越来越关心用户体验。...所以,所谓的延迟,并不是那么的吓人,笔者亲测,在App还在前台的时候执行WorkManager,异步任务基本上还是马上会进入调度执行的,但是当app进入后台之后,WorkManager就会尝试暂停任务。...所以在我们上面的例子里面,WorkManager也是可以使用的。 但是!Trade Off又来了。虽然WorkManager和Activity的生命周期无关了,但是却和整个App的前后台状态相关了。...", 直到团队的Senior有一次和我问我:"Why RxJava is better?"的时候,我才意识到,我好像从来没有系统性的总结过RxJava的优缺点,一时间有点语塞。
Android中WorkManager的简单使用1.简介:WorkManager:WorkManager是Google推出的一个新组件,用于替代传统的Service进行后台任务处理。...它的主要特点包括:独立执行:WorkManager的任务可以在应用退出后继续执行,适用于需要延迟执行或应用退出后仍需运行的任务。...由于Service依赖于主线程,不适合进行耗时的操作。WorkManager适用场景:适用于需要延迟执行或应用退出后仍需运行的任务,如定时任务、数据同步等。...WorkManager可以自动管理任务的执行和重试,减少了开发者的负担。12.总结:Service和WorkManager各有优缺点,选择使用哪一个取决于具体的需求场景。...如果需要依赖应用内部运行的后台任务,且任务不涉及耗时操作,可以选择Service;如果需要延迟执行或应用退出后仍需运行的任务,且希望减少开发工作量,可以选择WorkManager。
领取专属 10元无门槛券
手把手带您无忧上云