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

设备锁定时,WorkManager多次调用doWork()方法

设备锁定时,WorkManager会根据设备的状态和限制来调度任务的执行。当设备解锁时,WorkManager会自动重新调度尚未完成的任务,并多次调用任务的doWork()方法。

WorkManager是Android Jetpack组件中的一个库,用于处理延迟执行、周期性执行以及在特定条件下执行的任务。它提供了一种简单而灵活的方式来管理后台任务,并确保任务的执行在设备状态和限制下得到最佳优化。

在设备锁定时,WorkManager可以持续尝试执行任务,直到任务完成或达到最大尝试次数。这使得开发者能够确保任务在设备解锁后能够及时地执行,避免任务被阻塞或丢失。

WorkManager的优势包括:

  1. 简化后台任务管理:WorkManager提供了一套统一的API来管理后台任务,无需考虑设备状态、限制或应用进程的生命周期。
  2. 设备兼容性:WorkManager会自动选择最适合设备的任务调度方式,兼容不同版本的Android设备。
  3. 省电和网络友好:WorkManager会根据设备的电量和网络状态来调度任务,以减少电量消耗和网络使用。
  4. 灵活的任务调度:WorkManager支持延迟执行、周期性执行和一次性执行等多种任务调度方式,可根据应用需求进行配置。

在云计算领域,WorkManager可以与其他云服务进行集成,以实现更复杂的任务处理和调度。例如,在音视频处理场景中,可以使用WorkManager将上传的多媒体文件转码为不同格式,并将结果存储到云存储中。具体推荐的腾讯云相关产品和产品介绍链接地址,请参考腾讯云官方文档:https://cloud.tencent.com/document/product/647/42012

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

相关·内容

Android之任务调度WorkManager和JobSchedule的使用

前言 调度任务也是最近产品中需要用的,定时与后台进行数据同步,研究了几种方法后,觉得还是JobSchedule相对效果还好点,主要原因是WorkManager定时任务最短也需要15分钟,虽然JobSchedule...WorkManager使用起来也非常简单,因为我这边定时任务的频率在1分钟以内,如果不是因为最小间隔是15分钟的原因,就全部使用WorkManager了,直接代码开始。...写为了静态方法,外部调用也方便。...需要提醒 JobScheduler和WorkManager都只能在APP存活的时候执行,但是定时器是一直工作的。...关闭APP再启动,JobScheduler并不能够直接继续运行,但是WorkManager可以。 如果重启APP的时候,WorkManager任务的计时器应该已经执行了一次或多次,则会立即开始执行。

3.5K10

Jetpack WorkManager 看这一篇就够了~

执行加急工作你所需要知道的 从 WorkManager 2.7 开始,我们可以调用setExpedited方法来告诉系统,我这个任务是加急任务,请尽快执行。...WorkManager 在您调用 setExpedited() 时显示通知。...如果未能实现对应的 getForegroundInfo 方法,那么在旧版平台上调用 setExpedited 时,可能会导致运行时崩溃。...所以在第4小节中,默认Android12上并不会显示通知栏 WorkManager 只是一个处理定时任务的工具 WorkManager 最早兼容到 API 14(Android 4.0)...问题 任务添加到队列后,未开始执行前,如果是在onDestory中调用取消任务的方法是不可行的,此种情况下下次进来时仍然会有重复任务开始执行。原因不明。

1.4K20
  • 使用 Kotlin API 实践 WorkManager

    WorkManager 基础 当您需要某个任务保持运行状态,即使用户切换到别的界面或者用户将应用切换到后台,甚至设备重启的时候仍然不影响任务状态,那么非常推荐使用 WorkManager。...您可以扩展 Worker 类,并且复写 doWork() 方法。由于这个类非常重要,我们会在后边内容中进行详细介绍。这里是它最初的实现代码。...Worker 的时候,WorkManager 会在后台线程中自动调用 Worker.doWork()。...Worker.doWork() 属于同步调用 -- 您的后台操作需要以阻塞的方式执行,并且所有任务需要在整个 doWork() 函数结束的时候完成。...doWork() 方法是一个 suspend 方法。也就是说我们这里可以调用可挂起的 dao 函数。 /* Copyright 2020 Google LLC.

    51730

    笔记之Android架构组件-WorkManager

    Service的startService()方法,该方法会抛出IllegalStateException。...如果想继续使用service,必须调用Context.startForegroundService(),在前台启动新服务,系统创建服务,应用有五秒的时间来调用该服务的 startForeground()...方法以显示新服务的用户可见通知。...WorkManager会根据设备API的情况,自动选用JobScheduler, 或是AlarmManager来实现后台任务,WorkManager里面的任务在应用退出之后还可以继续执行(注意:是程序退出...: 取消现有的序列并用新序列其替换 保持现有顺序并忽略新的请求 将新序列附加到现有序列,在现有序列的最后一个任务完成后运行新序列的第一个任务 如果我们有一个不应该多次入队的任务,则唯一工作序列可能很有用

    88810

    Android新架构组件WorkManager

    WorkManager不是, 它在应用被杀, 甚至设备重启后仍能保证你安排给他的任务能得到执行。 其实Google自己也说了:”WorkManager并不是为了那种在应用内的后台线程而设计出来的....首先,新建个Worker的子类, 重写它的doWork()方法: class PullWorker : Worker() { override fun doWork(): WorkerResult...我们一般是新建个Worker的子类, 并重写doWork()方法。但是,doWork() 方法是没有参数的,我们有时有参数的需求,怎么办?...这时就要用上Worker.getInputData()方法了。 2.同理, doWork()方法是返回void的。你要是有结果想传出去, 就可以用Worker.setOutputData()。...即保证你给它的任务能完成, 即使你的应用都没有被打开, 或是设备重启后也能让你的任务被执行. WorkManager在设计上设计得比较好.

    69630

    WorkManager: 周期性任务

    API 对比以前介绍过的创建一次性任务方法,创建 PeriodicWorkRequest 的调用没有很大的不同,只是多出了一个额外的参数用来指定最小重复间隔 (minimum repeat interval...数据的输入和输出 WorkManager 允许您传递一个 Data 对象给您的 Worker,同时在 success 和 failure 方法调用时,也会返回一个新的 Data 对象给您 (由于在您返回...我已经看到这种模式几次,在 Application#onCreate 方法中,开发者创建了 WorkRequest 并将其入队。看起来一切正常,直到您发现有些任务重复执行了很多次。...我们常说,即使您的应用被关闭或者设备被重启,WorkManager 仍会保证执行您的任务。...我只会在有恰当理由时才会使用 REPLACE 策略,比如,当我想要在某个 Worker 的 doWork() 方法中对它自己重新排期时。

    1.7K30

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

    方法,并且需要返回任务的状态 WorkerResult: class MainWorker : Worker() { override fun doWork(): WorkerResult {...具体是什么方式和 Android 的版本和依赖环境有关: 定时任务 前面说了 OneTimeWorkRequest 是指任务只需要执行一遍,而 PeriodicWorkRequest 则可以发起一个多次执行的定时任务...任务唯一性 很多情况下,我们希望在任务队列里,同一个任务只存在一个,避免任务的重复执行,这时候可以用到 beginUniqueWork 这个方法WorkManager.getInstance()...以上,就是本文对 WorkManager 的简单介绍和用法讲解。 保活? 这里引入一个思考,既然 WorkManager 的生命力这么强,还可以实现定时任务,那能不能让我们的应用生命力也这么强?...Android 8.0(API 26) 在某些不被允许的情况下,调用 startService 会抛异常。

    1.8K70

    WorkManager 基础入门

    我将会把我们的类命名为 UploadWorker,然后重写 doWork() 方法。 Workers: 定义你的工作实际做了什么。 接受输入并产生输出。输入和输出都以键值对表示。...调用 enqueue 来启动 WorkManager 跟踪和调度工作的整个过程。 在幕后 —— 工作是怎么运行的 那么,WorkManager 能为您做些什么呢?...此数据库使 WorkManager 能够保证你的工作能够完成 —— 如果你的用户的设备重新启动并且工作中断,则可以从数据库中提取工作的所有详细信息,并在设备再次启动时重新启动工作。...之后,默认的 Executor 调用你的 Worker 的 doWork() 方法脱离主线程。 通过这种方式,默认情况下,你的工作都可以保证执行脱离主线程运行。...对于 Worker,这意味着 doWork() 方法已经被调用。 SUCCEEDED:当 doWork() 返回 Result.success() 时,工作进入这种最终状态。

    95260

    WorkManager 基础入门

    我将会把我们的类命名为 UploadWorker,然后重写 doWork() 方法。 Workers: 定义你的工作实际做了什么。 接受输入并产生输出。输入和输出都以键值对表示。...调用 enqueue 来启动 WorkManager 跟踪和调度工作的整个过程。 在幕后 —— 工作是怎么运行的 那么,WorkManager 能为您做些什么呢?...此数据库使 WorkManager 能够保证你的工作能够完成 —— 如果你的用户的设备重新启动并且工作中断,则可以从数据库中提取工作的所有详细信息,并在设备再次启动时重新启动工作。...之后,默认的 Executor 调用你的 Worker 的 doWork() 方法脱离主线程。 通过这种方式,默认情况下,你的工作都可以保证执行脱离主线程运行。...对于 Worker,这意味着 doWork() 方法已经被调用。 SUCCEEDED:当 doWork() 返回 Result.success() 时,工作进入这种最终状态。

    18910

    Android开发笔记(一百八十八)工作管理器WorkManager

    自定义的工作者必须实现构造方法,并重写doWork方法,其中构造方法可获得外部传来的请求数据,而doWork方法处理具体的业务逻辑。...特别要注意,由于doWork方法运行于分线程,因此该方法内部不能操作界面控件。...构建约束条件 Constraints constraints = new Constraints.Builder()         //.setRequiresBatteryNotLow(true) // 设备电量充足...        //.setRequiresCharging(true) // 设备正在充电         .setRequiredNetworkType(NetworkType.CONNECTED...鉴于后台任务是异步执行着的,若想知晓工作任务的处理结果,就得调用getWorkInfoByIdLiveData方法,获取工作信息并实时监听它的运行情况。

    1.2K30

    Jetpack-WorkManager

    调用流程 看懂上面图片的意思了吧,翻译一下就是workManager发起一个任务,如果当前程序正在运行,它就会再开一个工作线程去处理,如果当前程序退出或者在后台,它就会选择一个合适的方案去执行,这就包括了...workmanager相关类 worker 一个抽象类,需要继承worker并重写doWork()方法来进行具体的逻辑代码。...链式调用 val mutable = mutableListOf(workerA1,workerA2,workerA3) val mutableC =...(workerB).then(mutableC).enqueue() workManager还可以链式调用,比如上面的写法。...链式调用 链式调用的方式有多种,可以让多个任务按顺序执行,也可以多个任务并行,上个任务的数据可以传递到下一个任务里等,这里就不具体展开说了。

    1.5K20

    WorkManager的用法

    WorkManager为应用程序中那些不需要及时完成的任务提供了一个统一的解决方案,以便在设备电量和用户体验间达到一个比较好的平衡。...WorkManager有三个重要特点,分别如下:   1.针对的是不需要及时完成的任务   2.保证任务一定被执行   3.兼容范围广,最低能兼容API Level14 二.WorkManager的基本使用方法...() {//耗时的任务在doWork()方法中执行 Log.i("OneTimeWorkRequest","Work Start!")...返回数据 } }   doWork()方法有3种类型的返回值:若执行成功,则返回Result.success();若执行失败,则返回Result.failure();若需要重新执行,则返回Result.retry...6.WorkManager与Worker之间的参数传递     WorkManager通过setInputData()方法向Worker传递数据,数据的传递通过Data对象来完成,需要注意的是,Data

    40730

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

    0x00 WorkManager的高级用法 在上一文中已经了解到 WorkManager的基本用法之后,今天来看看它的一些高级用法: 链式任务调用 唯一任务序列 传递参数和获取返回值 0x01 链式任务...然后通过它再调用 WorkContinuation.then()把 workB和 workC加入到执行队列中,最后执行 WorkManager.enqueue()方法。...WorkManager.beginWith()方法可以传递多个 Worker对象,表示可以并行执行的任务组,然后再调用 then()方法。...// 最后再并行执行 workC1,workC2 .then(workC1, workC2) .enqueue() 还可以通过 WorkContinuation.combine()方法创建更加复杂的链接任务调用序列...0x02 唯一任务序列(Unique work sequences) 在应用程序开发中,可能会多次把同一个链式任务添加到 WorkManager中,但希望只有一个链式任务在执行,这时候可以使用唯一任务序列对链式任务指定处理规则

    76330
    领券