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

WorkManager: 周期性任务

如果您一直关注本系列文章,则会发现我们已经讨论过: Android Jetpack WorkManager | Android 中文教学视频 WorkManager 在 Kotlin 中的实践 本文将介绍...独特任务 某些 WorkManager 用例可能会陷入一种模式:当应用启动时,会在第一时间将一些任务加入队列。这些任务可能是您想要周期执行的后台同步任务,也可能是预定内容的下载。...不论是什么,常见的的模式都是需要在应用启动的第一时间将这些任务入队。 我已经看到这种模式几次,在 Application#onCreate 方法中,开发者创建了 WorkRequest 并将其入队。...所以,在应用每次启动时都尝试将您的 Worker 加入队列,会导致每次启动都添加一个新的 WorkRequest。...针对这种情况的解决方案是,使用 WorkManager#enqueueUniquePeriodicWork() 将您的 WorkRequest 作为独特任务 (unique Work) 加入队列: class

1.9K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Jetpack-WorkManager

    今天我们来讲以下google推荐我们使用jetpack进行后台任务处理的组件:workManager。...我们在开头就说了,workManager是一个可以用来进行后台任务的组件。...因为workManager比service强大太多,它可以在应用程序退出或者其他原因中止后,依然执行(本地任务如:本地图片的读取展示)或者应用程序打开后继续执行任务(网络请求)。...调用流程 看懂上面图片的意思了吧,翻译一下就是workManager发起一个任务,如果当前程序正在运行,它就会再开一个工作线程去处理,如果当前程序退出或者在后台,它就会选择一个合适的方案去执行,这就包括了...可以设置worker的执行顺序或者运行环境等。 periodicWorkRequest最低的时间间隔是15分钟执行一次。 workManager 管理workRequest的队列,全局唯一。

    1.5K20

    现代 WorkManager API 已发布

    本文将着重探讨 WorkManager 的 API 以及用法,帮助您深入了解它的运行机制,以及在实际开发中的使用方式。...您可以知道一个工作是处于队列等待、运行中、阻塞还是已完成状态。 WorkManager 现代 API 上述的基础 API 早在我们发布 WorkManager 的第一个稳定版时就已经提供了。...于是,回调中携带的信息就可以被用来生成一条通知。 有了这些辅助方法,我们就可以将 WorkManager 执行长时间运行工作所需要的 ForegroundInfo 实例保存起来。...对于第二个进程,我们会重复刚才的过程,再次调用 Application.onCreate,然后重新初始化 WorkManager。这意味着,我们将重复在第一个进程中所做的所有工作。...您可以跟往常一样在辅助进程中创建工作请求,但是此处应该使用 RemoteWorkManager 而不是 WorkManager。

    1.3K20

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

    接下来是 WorkManager 的简单使用。 使用 WorkManager 的实现包括以下几个步骤。...在 Worker 中,从 inputData 可以取到数据,这里取到后简单打印一下: class MainWorker : Worker() { override fun doWork(): WorkerResult...("MainActivity", workStatus.outputData.getString("name", "")) } }) 复制代码 如果需要取消一个在队列中的任务...这也是为什么前面说 WorkManager.getInstance().enqueue(request) 是将任务加入任务队列,并不代表马上执行任务,因为任务可能需要等到满足环境条件的情况才会执行。...使用任务链,我们可以将各种任务进行模块化。同样的,任务链不保证每个任务执行的时间,但是保证它们执行的先后顺序。

    1.9K70

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

    在计数未到达阈值的过程中,LeakCanary 会发送一条系统通知,你也可以点击该通知提前触发分析工作; 收集过程中的系统通知消息 提示: LeakCanary 为不同的 App 状态设置了不同默认阈值...即:在 Activity#onCreate 和 Fragment#onCreate 事件中实例化一个自定义ViewModel,在进入 ViewModel#onClear() 方法时,通过反射获取当前作用域中所有的...第 2 步: postDelay 五秒后检查引用对象是否出现在引用队列中,出现在队列则说明被监控对象未发生泄漏。...异步分析: 判断是否可以类加载 androidx.work.WorkManager ,如果可以,则使用 WorkManager 异步分析; WorkManagerHeapAnalyzer.kt internal...,也可以在配置项中自定义。

    1.2K10

    Jetpack 最新成员 AndroidX App Startup 实践以及原理分析

    来自 Google 文档:App Startup 是 Android Jetpack 最新成员,提供了在 App 启动时初始化组件简单、高效的方法,无论是 library 开发人员还是 App 开发人员都可以使用...无论是 Google 提供的库还是第三方库,启动时运行一些初始化逻辑并不少见,例如 WorkManager 在应用启动时使用 ContentProvider 进行初始化,来看一下 Google 工程师...在应用启动时使用 ContentProvider 进行初始化,我们来看一下 WorkManager 的源码,先来看一下 AndroidManifest.xml 文件内容。......... // 省略了没用的代码 } 如上所见其实就是在 WorkManagerInitializer 的 onCreate() 方法里面,使用默认配置初始化 WorkManager...定义一个 WorkContentProvider 并在 onCreate 方法中打印一行日志。

    84730

    Android Studio 对现代 WorkManager 的支持

    在 上一篇文章 中,我们提到了现代 WorkManager API 对工具支持方面也进行了改进,本文我们将结合实际案例来看看具体有哪些改进。如果您更喜欢通过视频了解此内容,请 点击此处 查看。...△ 使用 WorkManagerSample 应用和应用检查器面板 现在 CleanupWorker 已经完成,队列中的其他 Worker 也将按照次序运行。...您可以点击数据库检查器标签页,并在其中查找某项工作的唯一 ID。您会发现,有关该特定执行的各项信息都被保存下来了。 后台任务检查器 您还可以进一步查看某个特定的执行被安排到了哪一个队列中。...您可以看到特定 Worker 是否受到限制,以及更加详细的频率和执行状态信息。 WorkManager 可以使用其中一个 Worker 的输出数据,并将其传递到流水线下游的另一个 Worker 中。...△ 演示 Worker 执行失败的场景 这里为您展示当工作链中的某个 Worker 执行失败时的场景。在工作的接续队列中插入了一个出错的 Worker,然后重启应用。

    46720

    从Service到WorkManager

    使用方法如下: startForegroundService(intent); public void onCreate() { super.onCreate();...(可能有的朋友感觉比较陌生,其实他也是通过Service实现的,这个待会再说) 它能做的工作就是可以在你所规定的要求下进行自动任务执行。...具体可以看看参考链接的分析。 所以也就知道了,在5.0之后,如果有需要后台任务执行,特别是需要满足一定条件触发的任务,比如网络电量等等情况,就可以使用JobScheduler。...WorkManager WorkManager 是一个 API,可供您轻松调度那些即使在退出应用或重启设备后仍应运行的可延期异步任务。...包括在设备重启之后都能继续任务。 3、可以定义不同工作任务的衔接关系。比如设定一个任务接着一个任务。 总之,它是后台执行任务的一大利器。

    1.5K30

    笔记之Android架构组件-WorkManager

    所以,在不久的将来,service的使用范围会越来越小,取而代之的,是谷歌推出的新的技术:WorkManager。 WorkManager在工作的触发器 满足时, 运行可推迟的后台工作。...配置后台运行任务运行条件和约束条件,并且构建后台任务请求 将后天任务请求传入WorkManager.enqueue()中,系统会在合适的时间运行。 1....如果在任务运行期间某个约束不再得到满足,则 WorkManager 将停止工作器。当约束继续得到满足时,系统将重新尝试执行该任务。 2....// WorkManager 提供两种不同类型的 InputMerger: // OverwritingInputMerger 会尝试将所有输入中的所有键添加到输出中。...每个唯一的工作序列都有一个名字,WorkManager一次只允许一个工作序列使用该名称,当我们创建一个新的唯一工作序列时,如果已经有一个未完成的序列具有相同的名称,则指定WorkManager应执行的操作

    91210

    Android中WorkManager的简单使用

    Android中WorkManager的简单使用1.简介:WorkManager:WorkManager是Google推出的一个新组件,用于替代传统的Service进行后台任务处理。...它的主要特点包括:‌独立执行‌:WorkManager的任务可以在应用退出后继续执行,适用于需要延迟执行或应用退出后仍需运行的任务。‌...兼容性‌:WorkManager会根据设备的API情况自动选择合适的实现方式,2.核心概念:在深入了解WorkManager之前,让我们先了解一些核心概念:WorkRequest(工作请求):表示要执行的单个后台任务...Worker(工作者):执行实际后台任务的类。您可以扩展Worker类并重写doWork()方法来定义自己的后台逻辑。WorkManager(工作管理器):用于调度和跟踪工作请求的中心类。...它负责将工作请求提交给适当的后台任务执行器,并处理与工作周期、重试策略等相关的逻辑。Constraints(约束条件):用于指定工作请求在何时运行的条件,如网络状态、电池状态等。

    15100

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

    约束类是可以在使用 WorkRequest.Builder 创建的时候进行传递给 WorkRequest。 WorkManager:工作任务管理器,它是用于管理工作任务的请求队列的类。...通过它可以把一个 WorkRequest加入到任务队列中,然后根据系统的资源和约束条件对工作任务进行调度。 WorkStatus:工作状态类,它包含了工作任务当前的状态信息。...创建WorkRequest 使用 WorkRequest的子类,根据具体业务创建对应的请求实例。例如本例中,使用一次性任务来构建请求。然后把任务请求加入到 WorkManager管理的队列中。...的 enqueue方法将 WorkRequest加入队列。...跟一次性任务一样,通过 WorkManager.enqueue() 方法加入到工作任务队列中。

    1.6K20

    Android-Jetpack笔记-WorkManager

    WorkManager能帮我们更好的管理后台任务,可以更好地管理执行时机、执行顺序和执行状态(有无网络、是否在充电)。...中使用, class WorkManagerActivity extends AppCompatActivity { void onCreate(Bundle savedInstanceState...(this).beginWith(workRequest2).then(workRequest).enqueue(); //可以监听任务的工作状态 LiveData<List...优缺点 优点: 使用方便,内部会根据不同系统选择合适方案 能链式调度,让各任务按指定顺序执行 能配置各种执行状态,如有无网络、是否在充电 任务被存储进数据库,关机仍可执行(待验证) 缺点: 还没发现...参考 知乎-WorkManager的基本使用 B站-Android Jetpack WorkManager | Android 中文教学视频 掘金-[译] 从Service到WorkManager

    1K20

    深入探索Android 启动优化(七) - JetPack App Startup 使用及源码浅析

    翻译过来就是: App Startup 这个库提供了一个组件,可以在应用程序启动的时候初始化。 开发人员可以使用这个组件精简启动序列和显式地设置初始化的顺序。...在 AndroidManifest 里面注册了自己的 xxSDkProvider,然后在 xxSDkProvider 的 onCreate 方面里面进行初始化,确实调用者不需要自己初始化了,可却增加了启动耗时...其实很简单, 第一步,在 AndroidManifest InitializationProvider 中移除 移除 <meta-data 标签 在代码中调用 AppInitializer initializeComponent...onCreate 方法中调用 AppInitializer discoverAndInitialize 方法进行初始化。...我们在启动优化的时候,是不是可以去掉相应的 ContentProvider,减少创建 Provider 的时间 实际项目中 启动优化,大多数啊都会使用多线程异步加载,这时候 App start up 就显得很鸡肋了

    1.4K10

    使用 Jetpack App Startup 库减少应用启动时间

    应用和库往往需要在 Application.onCreate() 之前初始化组件,如: WorkManager、ProcessLifecycleObserver、FirebaseApp 等。...当 App Startup 进入稳定版本后,我们将更新诸如 WorkManager 和 ProcessLifecycle 之类的库,以从中受益。 App Startup 支持 API 14 及以上。...如何使用 配置 Gradle 为了在您的依赖库或应用中使用 App Startup,您需要在 Gradle 文件中添加如下依赖项: repositories { google() maven...该 ContentProvider 在合并后的 AndroidManifest.xml 文件中查找 条目来发现 Initializer。...延迟初始化 我们强烈推荐您使用延迟初始化来进一步提升启动性能,您可以通过如下方式实现组件的延迟初始化,在 条目下为 Initializer 增加 tools:node="remove

    39520

    Android Jetpack架构组件(七)之WorkManager

    输入值以键值对的形式存储在 Data 对象中,并且可以在工作请求中设置,WorkManager 会在执行工作时将输入 Data 传递给工作,Worker 类可通过调用 Worker.getInputData...3.3 任务管理 3.3.1 唯一任务 在定义了Worker 和 WorkRequest之后,最后一步是将工作加入队列,将工作加入队列的最简单方法是调用 WorkManager enqueue() 方法...在将工作加入队列时需要注意避免重复加入的问题,为了实现此目标,我们可以将工作调度为唯一任务。 唯一任务可确保同一时刻只有一个具有特定名称的工作实例。...3.3.2 冲突解决策略 有时候,任务的调度会出现冲突,此时我们需要告知 WorkManager 在发生冲突时要执行的操作,可以通过在将工作加入队列时传递一个枚举来实现此目的。...3.4 观察任务状态 在将任务加入到队列后,我们可以根据 name、id 或与其关联的 tag 在 WorkManager 中查询任务的相关信息,并且检查它的状态,涉及的方法有如下几个。

    2.1K11

    WorkManager _Android新架构组件

    它不适用于应用进程内的后台工作,如果应用进程消失,就可以安全地终止,对于这种情况,推荐你使用线程池 2 WorkManager库的架构 ?...从图中可以看出,WorkManager执行队列中包含JobScheduler,JobDispatcher,Executor,AlarmManager。...例如,如果我们想检查任务是否完成,可以使用如下代码: WorkManager.getInstance().getStatusById(compressionWork.id)...取消任务: 当我们将任务入列后,我们还可以取消这个任务。要取消任务,我们需要这个任务的Work ID,当然Work ID可以从WorkRequest对象中获取。...WorkManager还提供方法来取消 唯一工作序列(在高级用法中会有所涉及)中的所有任务,或尽最大努力的取消具有指定标记的所有任务。

    2.7K20

    Jetpack组件之WorkManager

    但不合理的使用这些API,会造成消耗大量电量。JetPack中的WorkManager为应用程序执行后台任务提供了 一个统一的解决方案。...任务一定会被执行 WorkManager能保证任务一定会被执行,即使应用程序不在运行中,甚至是在设备重启后,任务仍然会在适当的时刻执行,这是因为WorkManager有自己的数据库,任务的所有信息和数据都保存在数据库中...这也是Android的碎片化所导致的,许多厂商修改了手机ROM,造成不能得到执行,因此,分析需求是否可以使用WorkManager。...工作器的确切执行时间取决于您在 WorkRequest 对象中设置的约束以及系统执行的优化。 需要注意的是定义的最短重复间隔是 15 分钟,在源码中也可以看到。...如果对任务的执行实际比较敏感,可以将PeriodicWorkRequest 配置为在每个时间间隔的灵活时间段内执行。

    1.2K10

    WorkManager的用法

    如果这些api没有被正确的使用,则可能导致消耗大量的电量。WorkManager为应用程序中那些不需要及时完成的任务提供了一个统一的解决方案,以便在设备电量和用户体验间达到一个比较好的平衡。...WorkManager有三个重要特点,分别如下:   1.针对的是不需要及时完成的任务   2.保证任务一定被执行   3.兼容范围广,最低能兼容API Level14 二.WorkManager的基本使用方法...()方法中执行 Log.i("OneTimeWorkRequest","Work Start!")...3.使用WorkRequest配置任务     配置任务就是在告诉系统,任务在何时运行及如何运行,下面结合代码讲解 public class MainActivity extends AppCompatActivity...(this).enqueue(oneTimeWorkRequest);//将任务提交系统 } }   4.将任务提交系统:WorkManager.getInstance(this).enqueue

    43930
    领券