Android中WorkManager的简单使用1.简介:WorkManager:WorkManager是Google推出的一个新组件,用于替代传统的Service进行后台任务处理。...灵活的触发器:可以根据需要设置不同的触发器,如定时任务、网络状态变化等。自动管理:WorkManager会自动管理任务的执行和重试,减少了开发者的工作量。...它包含任务的唯一标识符、约束条件(如网络连接、充电状态等)以及其他配置选项。Worker(工作者):执行实际后台任务的类。您可以扩展Worker类并重写doWork()方法来定义自己的后台逻辑。...WorkManager(工作管理器):用于调度和跟踪工作请求的中心类。它负责将工作请求提交给适当的后台任务执行器,并处理与工作周期、重试策略等相关的逻辑。...WorkManager可以自动管理任务的执行和重试,减少了开发者的负担。12.总结:Service和WorkManager各有优缺点,选择使用哪一个取决于具体的需求场景。
介绍 在Android应用开发中,有效地管理后台任务是至关重要的。Android WorkManager是一个强大的库,旨在简化任务调度和后台工作管理。...Worker: 开发者定义的执行实际任务的工作单元。每个Worker都运行在独立的后台线程中。 WorkRequest: 定义了任务的相关参数,如约束条件、重试策略等。...创建任务 创建一个继承自Worker的任务类,实现doWork()方法,定义具体的后台任务逻辑。...使用OneTimeWorkRequest或PeriodicWorkRequest来创建工作请求,并设置触发条件。...WorkManager.getInstance(context).enqueue(workRequest) 高级使用方式 自定义重试策略 WorkManager允许开发者自定义任务的重试策略。
一、WorkManager概述 1.1 WorkManager简介 在Android应用开发中,或多或少的会有后台任务的需求,根据需求场景的不同,Android为后台任务提供了多种不同的解决方案,如Service...为了解决Android耗电的问题,Android提供了WorkManager ,用来对应用中那些不需要及时完成的任务提供一个统一的解决方案,借助WorkManager,开发者可以轻松调度那些即使在退出应用或重启设备时仍应运行的可延期异步任务...针对不需要即时完成的任务 在Android开发中,经常会遇到后台下载、上传日志信息等需求,一般来说,这些任务是不需要立即完成的,如果我们自己使用来管理这些任务,逻辑可能会非常负责,并且如果处理不恰当会造成大量的电量消耗...灵活的重试政策 有时任务执行会出现失败,WorkManager 提供了灵活的重试政策,包括可配置的指数退避政策。...Result.retry():工作失败,根据其重试政策在其他时间尝试。 2.3 创建 WorkRequest 完成Worker的定义后,必须使用 WorkManager 服务进行调度该工作才能运行。
Result 会通知 WorkManager 服务工作是否成功,以及工作失败时是否应重试工作。...设置重试和退避策略 将输入数据传递给工作 使用标记将相关工作分组在一起 WorkRequest 对象包含 WorkManager 调度和运行工作所需的所有信息。...该类有两个派生实现,可用于创建 OneTimeWorkRequest 和 PeriodicWorkRequest 请求。...,也不需要别的参数设置,所以直接创建了PeriodicWorkRequest调用,在Activity中代码如下: //创建WorkManager任务 val periodicwork...这个Service会在一个运行在主线程的Handler中执行规划的任务,所以应用需要在另外的thread/handler/AsyncTask中执行业务逻辑,如果不这么做的话可能会引起主线程的阻塞。
WorkManager是用于后台执行任务的工具,相比于Service、JobSchedule等,它拥有很低的能耗,但是它不是立即执行任务的,对于一些不需要及时完成的任务,使用WorkManager是一个很好的选择...,继承Worker,doWork方法需要返回一个Result的结果,有成功、重试、失败: package com.aruba.workmanager; import android.content.Context...(this).enqueue(workRequest); 2.指数退避策略 我们也可以为任务配置指数退避策略,当任务需要retry时,它会根据给定的退避时间指数增长,列如:退避时间为2,重试的时间间隔为...中,doWork方法内可以获取到创建时传递的参数,并且传递新的参数 @NonNull @Override public Result doWork() { Log.i...对象,并且指定的时间不能低于15分钟 //周期性任务 if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O
首语 Android应用中大部分都需要执行后台任务,因此也提供了多种解决方案,如JobScheduler、Loader等。但不合理的使用这些API,会造成消耗大量电量。...任务一定会被执行 WorkManager能保证任务一定会被执行,即使应用程序不在运行中,甚至是在设备重启后,任务仍然会在适当的时刻执行,这是因为WorkManager有自己的数据库,任务的所有信息和数据都保存在数据库中...注: WorkManager宣称能够保证任务得到执行,但是在非Android原生系统的真是设备上进行测试发下,应用彻底退出和设备重启后,任务没有再次被执行。...这也是Android的碎片化所导致的,许多厂商修改了手机ROM,造成不能得到执行,因此,分析需求是否可以使用WorkManager。...该类有两个实现类,可用于创建 OneTimeWorkRequest 和 PeriodicWorkRequest 请求。
0x00 简述 WorkManager 是 Android Jetpack中的一部分,它主要是封装了 Android 后台任务的调度逻辑。...它有两个具体的实现: OneTimeWorkRequest.Builder类和 PeriodicWorkRequest.Builder类,可以分别创建相应的任务请求实例。...定义Worker 我们首先要定义一个 Worker类,并重写 doWork()方法,这里定义了如何执行任务的具体逻辑。例如在此例子中, myCompress()就是具体的执行任务的逻辑。...创建WorkRequest 使用 WorkRequest的子类,根据具体业务创建对应的请求实例。例如本例中,使用一次性任务来构建请求。然后把任务请求加入到 WorkManager管理的队列中。...这时候可使用到 PeriodicWorkRequest.Builder 来创建一个周期任务。跟一次性任务一样,通过 WorkManager.enqueue() 方法加入到工作任务队列中。
因为workManager比service强大太多,它可以在应用程序退出或者其他原因中止后,依然执行(本地任务如:本地图片的读取展示)或者应用程序打开后继续执行任务(网络请求)。...workmanager相关类 worker 一个抽象类,需要继承worker并重写doWork()方法来进行具体的逻辑代码。...可以设置worker的执行顺序或者运行环境等。 periodicWorkRequest最低的时间间隔是15分钟执行一次。 workManager 管理workRequest的队列,全局唯一。...'android.arch.work:work-firebase:1.0.0-alpha11' 创建自己的worker来执行具体的逻辑,比如:网络请求 class RequestWorker (context...return jsonString } } 网络请求用的是kotlin中的协程,api接口是网络上随便找的。
前言 最近有读者反馈,在我的新书《Android Jetpack 开发:原理解析与应用实战》中并没有提及到WorkManager,这是因为目前这个东西在国内并不是很好用。...在工作器中调用 setForeground() 来处理通知。 可延期 一次性或定期 PeriodicWorkRequest 和 Worker。 接下来来看具体的使用方法。...重试策略 在3.2中定义Work中我们提到了Result.retry可以让任务重试,我们也可以自定义任务的重试策略和退避政策,我们通过具体的例子来解释。...总结 特性及注意事项 在早于 Android 12 的 API 版本中,加急工作都是由前台服务执行的,而从 Android 12 开始,它们将由加急作业 (expedited job) 实现。...所以在第4小节中,默认Android12上并不会显示通知栏 WorkManager 只是一个处理定时任务的工具 WorkManager 最早兼容到 API 14(Android 4.0)
一.WorkManager的作用 绝大部分应用程序都有后台执行任务的需求,根据需求的不同,Android为后台任务提供了多种解决方案,如JobShedule,Loader,Service等。...如果这些api没有被正确的使用,则可能导致消耗大量的电量。WorkManager为应用程序中那些不需要及时完成的任务提供了一个统一的解决方案,以便在设备电量和用户体验间达到一个比较好的平衡。...doWork()方法中执行 Log.i("OneTimeWorkRequest","Work Start!")...,如服务器宕机,你希望一段时间后重试该任务 .setInputData(inputData)//传递数据给Worker .build();...7.周期性任务PeriodicWorkRequest WorkRequest有两种实现方式,OneTimeWorkRequest和PeriodicWorkRequest,即一次性任务和周期性任务
如果您一直关注本系列文章,则会发现我们已经讨论过: Android Jetpack WorkManager | Android 中文教学视频 WorkManager 在 Kotlin 中的实践 本文将介绍...在 v2.1-alpha02 之前,无法在创建 PeriodicWorkRequest 时设置初始延迟 在与他人的讨论中,我遇到的一些常见问题与周期性任务有关。...API 对比以前介绍过的创建一次性任务方法,创建 PeriodicWorkRequest 的调用没有很大的不同,只是多出了一个额外的参数用来指定最小重复间隔 (minimum repeat interval...每日任务 由于周期性间隔是不精确的,您无法创建在每天指定时间执行的 PeriodicWorkRequest,即使我们放宽精度限制也不行。...不论是什么,常见的的模式都是需要在应用启动的第一时间将这些任务入队。 我已经看到这种模式几次,在 Application#onCreate 方法中,开发者创建了 WorkRequest 并将其入队。
实现逻辑也非常简单:找到相关目录,然后逐一判断目录中的文件是否为.png图片,如果是就删除。...(): 重试 对于success与failure,它还支持传递Data类型的值,Data内部是一个Map来管理的,所以对于kotlin可以直接使用workDataOf return Result.success...4 配置WorkRequest WorkManager主要是通过WorkRequest来配置任务的,而它的WorkRequest种类包括: OneTimeWorkRequest PeriodicWorkRequest...由于篇幅有限,这里就不一一展开,感兴趣的可以查看源码 4.2 PeriodicWorkRequest PeriodicWorkRequest是可以周期性的执行任务,它的使用方式与配置和OneTimeWorkRequest...7 项目地址 7.1 Android精华录 该库的目的是结合详细的Demo来全面解析Android相关的知识点, 帮助读者能够更快的掌握与理解所阐述的要点。
) 开始,如果一个应用的目标版本为Android 8.0,当它在某些不被允许创建后台服务的场景下,调用了Service的startService()方法,该方法会抛出IllegalStateException...+ coroutines implementation "androidx.work:work-runtime-ktx:2.3.1" WorkManager的简单使用 创建后台任务,并且实现具体的任务逻辑...配置后台运行任务运行条件和约束条件,并且构建后台任务请求 将后天任务请求传入WorkManager.enqueue()中,系统会在合适的时间运行。 1....// WorkManager 提供两种不同类型的 InputMerger: // OverwritingInputMerger 会尝试将所有输入中的所有键添加到输出中。...每个唯一的工作序列都有一个名字,WorkManager一次只允许一个工作序列使用该名称,当我们创建一个新的唯一工作序列时,如果已经有一个未完成的序列具有相同的名称,则指定WorkManager应执行的操作
dependencies { implementation "android.arch.work:work-runtime-ktx:$versions.work" } 创建Worker 创建一个类...在创建完任务后,需要将该任务加入WorkManager的队列中。...在以下代码中,创建了只执行一次的任务OneTimeWorkRequest,并且携带了输入的参数setInputData,创建完后,就可以将它插入到WorkManager的队列中等待执行。...).setInputData(inputData).build() WorkManager.getInstance().enqueue(workRequest) 通过PeriodicWorkRequest...创建的任务,是会定期执行的,需要传入定期的时间即可 创建链式任务 当某些任务具有依赖关系时候(如A依赖B完成的结果,B又依赖C完成的结果),则需要使用链式任务。
在Android开发中,后台网络任务是一个常见的需求。为了让应用在后台运行时能够高效地执行网络任务,我们需要使用合适的调度技术。...一、WorkManager的使用和原理 1.1 使用方法 WorkManager是Android Jetpack的一部分,它提供了一种简单的方法来执行后台任务。...在Android中,我们可以使用BatteryManager类来获取电量信息,然后根据电量信息调整后台任务的执行频率。...仅支持Android 5.0(API级别21)及以上 针对高性能和节能要求较高的应用 五、案例分享 以下是一个实际的Android后台网络任务项目案例,讲述了在开发过程中遇到的问题、使用的技术和解决方案...六、总结 本文详细介绍了WorkManager和JobScheduler两种后台网络任务调度技术,以及如何在Android应用中执行后台网络任务。我们还讨论了一些优化策略,以及分享了一个实战案例。
Android11不光废弃了AsyncTask,还把IntentService一起废掉了,对于后台的异步服务,官方建议改为使用工作管理器WorkManager。...当然这些后台工具的用法各不相同,徒增开发者的学习时间而已,于是乎谷歌索性把它们统一起来,在Jetpack库中推出了工作管理器WorkManager。...这个WorkManager的兼容性很强,对于Android6.0或更高版本的系统,它通过JobScheduler完成后台任务;对于Android6.0以下版本的系统(不含Android6.0),通过AlarmManager...自定义的工作者必须实现构造方法,并重写doWork方法,其中构造方法可获得外部传来的请求数据,而doWork方法处理具体的业务逻辑。...点此查看Android开发笔记的完整目录
作为 Android Jetpack 中的新组件,WorkManager 负责用来管理后台任务,它和一个异步任务以及 Service 有什么区别呢?看完你就知道了。...定义 WorkRequest 在 MainActivity 中定义 WorkRequest: val request = OneTimeWorkRequest.Builder(MainWorker::class.java...具体是什么方式和 Android 的版本和依赖环境有关: 定时任务 前面说了 OneTimeWorkRequest 是指任务只需要执行一遍,而 PeriodicWorkRequest 则可以发起一个多次执行的定时任务...: val request = PeriodicWorkRequest .Builder(MainWorker::class.java, 15, TimeUnit.MINUTES)...如果是 PeriodicWorkRequest,我想到的办法是每次执行之前,根据标签去取消已有的任务。 以上,就是本文对 WorkManager 的简单介绍和用法讲解。 保活?
对于绝大部分后台执行任务来说,使用 WorkManager 是目前 Android 平台上的最佳实践。...目前为止 WorkManager 系列已经讨论过: Android Jetpack WorkManager | Android 中文教学视频 在这篇文章中,我们将讨论: 在 Kotlin 中如何使用 WorkManager...如 WorkManager 发布日志 中描述的那样,只需要在 build.gradle 文件中添加 androidx.work:work-runtime-ktx 依赖项,即可使用 KTX 版的 WorkManager...要了解关于如何在 Kotlin 中使用 WorkManager,可以尝试这个 codelab。 测试 Worker 类 WorkManager 有几个额外的工具类,可以很方便地测试您的 Work。...使用 TestListenableWorkerBuilder 也可以将输入数据传递给 Worker 或设置 runAttemptCount,这对于测试 Worker 内部的重试逻辑是非常有用的。
WorkManager 是一个 Android Jetpack 库,当满足工作的约束条件时,用来运行可延迟、需要保障的后台工作。对于许多类型的后台工作,WorkManager 是当前的最佳实践方案。...始终返回表示成功,失败或重试的值。...还有一个 Result.retry() 选项,它将在之后的时间再次重试你的工作。...我之前说过,如果 Worker 返回 Result.retry(),WorkManager 将重新计划工作。你可以在创建新的 WorkRequest 时自定义退避条件。这允许你定义何时应重试运行。...想亲自试试 WorkManager 吗?查看 codelab,包含 Kotlin 和 Java 代码。 随着我们继续更新本系列,请继续关注有关 WorkManager 主题的更多博客文章。
WorkManager 是一个 Android Jetpack 库,当满足工作的约束条件时,用来运行可延迟、需要保障的后台工作。对于许多类型的后台工作,WorkManager 是当前的最佳实践方案。...始终返回表示成功,失败或重试的值。...还有一个 Result.retry() 选项,它将在之后的时间再次重试你的工作。...我之前说过,如果 Worker 返回 Result.retry(),WorkManager 将重新计划工作。你可以在创建新的 WorkRequest 时自定义退避条件。这允许你定义何时应重试运行。...(来自:Working with WorkManager Android 开发者峰会 2018) 想看精彩的视频讲解,请查看 WorkManager Android 开发者峰会演讲。