Android WorkManager使用介绍

这篇具有很好参考价值的文章主要介绍了Android WorkManager使用介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、引言

  WorkManager 是google提供的异步执行任务的管理框架,是 Android Jetpack 的一部分,会根据手机的API版本和应用程序的状态来选择适当的方式执行任务。
  在后台执行任务的需求是非常常见的,Android也提供了多种解决方案,如JobScheduler、Loader、Service等,如果这些API没有被恰当使用,则可能会消耗大量电量。Android在解决应用程序耗电问题上做了各种尝试,从Doze到App Standby,通过各种方式限制和管理应用程序,以保证应用程序不会在后台消耗过多的设备电量。WorkManager为应用程序中那些不需要及时完成的任务提供了一个统一的解决方案,以便在设备电量和用户体验之间达到一个比较好的平衡

二、WorkManager特点

  • 针对的是不需要及时完成的任务
    例如,发送应用程序日志、同步应用程序数据、备份用户数据等,这些任务一般都不需要立即完成,如果我们自己来管理这些任务,逻辑可能会非常复杂,若API使用不恰当,可能会消耗大量电量。
  • 保证任务一定会执行
    WorkManager能保证任务一定会被执行,即使应用程序当前不在运行中,甚至在设备重启过后任务仍然会在适当的时刻被执行。WorkManager有自己的数据库,关于任务的所有信息和数据都保存在该数据库中。因此只要任务交给了WorkManager,哪怕应用程序彻底退出或者设备被重新启动,WorkManager依然能够保证完成任务。
  • 兼容范围广
    WorkManager最低能兼容API Level 14,并且不需要设备安装Google Play Services。因此,不用过于担心兼容性问题,因为API Level 14已经能够兼容几乎100%的设备了。

三、WorkManager兼容方案

  WorkManager能根据设备的情况,选择不同的执行方案。在API Level 23以上的设备中通过JobScheduler完成任务,在API Level 23以下的设备中,通过AlarmManager和Broadcast Receivers组合来完成任务。但无论采用哪种方案,任务最终都是由Executor来执行的。另外,WorkManager不是一种新的工作线程,它的出现不是为了替代其他类型的工作线程。工作线程通常立即运行,并在任务执行完成后给用户反馈,而WorkManager不是即时的,它不能保证任务能立即得到执行
Android WorkManager使用介绍

四、WorkManager使用方法

1. 使用前的准备

导入依赖

将依赖项添加到应用的 build.gradle 文件中:

dependencies {
   
    def work_version = "2.7.1"
    implementation "androidx.work:work-runtime:$work_version"
}

创建Activity

新建一个Activity,在其布局文件中放置一个按钮,作为任务的触发器。

2. 定义任务

新建一个MyWork类继承Worker类,重写dowork()方法,在其中添加希望由WorkManager 运行的工作任务。

import android.content.Context;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.work.Worker;
import androidx.work.WorkerParameters;
 
public class MyWork extends Worker {
   
 
    public MyWork(@NonNull Context context, @NonNull WorkerParameters workerParams) {
   
        super(context, workerParams);
    }
 
    @NonNull
    @Override
    public Result doWork() {
   
        //任务的具体行为
        Log.d("tag", "Work doWork");
        return Result.success();
    }
}

doWork()将返回执行结果Result,会通知WorkManager服务工作是否成功,以及工作失败时是否应重试工作。

  • Result.success():工作成功完成。
  • Result.failure():工作失败。
  • Result.retry():工作失败,应根据其重试策略在其他时间尝试。

3. 配置任务

任务通过WorkRequest在WorkManager中进行定义,为了使用WorkManager调度任务,需要先创建一个WorkRequest对象,将其加入队列。

//为任务创建WorkRequest对象
WorkRequest myWorkRequest = ...
//将任务请求加入队列
WorkManager workManager = WorkManager.getInstance(this);
workManager.enqueue(myWorkRequest);

其中,WorkRequest对象有两种类型:

  • OneTimeWorkRequest:只会执行一次的任务请求
  • PeriodicWorkRequest:将以周期形式反复执行的任务请求

WorkRequest对象包含WorkManager调度和运行工作所需的所有信息。其中包括运行工作必须满足的约束、调度信息(例如延迟或重复间隔)、重试配置,并且可能包含输入数据(如果工作需要),下面以一次性任务请求为例,介绍各种配置信息的定义方式与实际效果

设置任务触发条件

需要实例化一个Constraints对象指定任务运行的约束(触发条件),常用的约束类型如下:文章来源地址https://www.toymoban.com/news/detail-400176.html

类型 说明
NetworkType 约束运行工作所需的网络类型。例如 Wi-Fi (UNMETERED)
BatteryNotLow 如果设置为 true,那么当设备处于“电量不足模式”时,工作不会运行
RequiresCharging 如果设置为 true,那么工作只能在设备充电时运行
DeviceIdle 如果设置为 true,则要求用户的设备必须处于空闲状态,才能运行工作。在运行批量操作

到了这里,关于Android WorkManager使用介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android Jetpack 从使用到源码深耕【调度任务组件WorkManager 从实践到原理 】(二)

    上文,我们进行了google 任务调度系列知识体系的回顾、探索,引出了WorkManager 。然后我们基于一个简单的需求背景,进行了WorkManager的引入使用,不过从使用上,我们看到和JobScheduler几乎一样的使用步骤,所以猜想内部实现原理,估计和JobScheduler差不多,本文,我们就WorkMa

    2023年04月09日
    浏览(29)
  • Android Jetpack组件库(第三部分)---WorkManager

    Android Jetpack 是 Google 推出的一整套帮助 Android 应用程序开发的库、工具包和架构指南,旨在为 Android 应用程序提供更快,更轻松,更稳定的开发体验。自推出以来已经发展成了一个庞大的技术生态系统,包括了许多使用方便、功能强大的库,以下是其中一些新特性、新组件:

    2024年02月07日
    浏览(33)
  • Android 使用Google Map API;云计算概念IaaS,PaaS

    Infrastructure-as-a-Service(基础设施即服务) 第一层叫做IaaS,有时候也叫做Hardware-as-a-Service。 几年前如果你想在办公室或者公司的网站上运行一些企业应用,你需要去买服务器,或者别的高昂的硬件来控制本地应用,让你的业务运行起来。 但是现在有了IaaS,你可以将硬件外包

    2024年03月21日
    浏览(37)
  • Android集成Google登录

    集成google登录之前需要有一下三点要求,只有具备一下两点要求才能集成google登录:         1,android 运行版本4.0及更新版本         2,android 设备支持谷歌服务     1.1  首先得在Firebase控制台创建一个自己的项目            网址:https://console.firebase.google.com/ 1.

    2024年01月21日
    浏览(32)
  • Google Bard介绍

    一、介绍 Bard是由谷歌LaMDA模型提供支持的实验型对话AI服务,利用来自互联网的信息提供最新、高质量的回复。谷歌表示,Bard是对搜索引擎的补充,而不只是一种搜索。 二、官网 https://bard.google.com/ 三、使用方法 Bard目前 仅支持英语/

    2024年02月16日
    浏览(32)
  • Google 扫码器(仅限 Android)

    Google Code Scanner API 提供了全面的扫描解决方案,无需您的应用请求相机权限,同时保护用户隐私。这是通过将扫描代码委托给 Google Play 服务并仅将扫描结果返回给您的应用来完成的(视频 1)。 所有图片处理操作都在设备上进行,并且 Google 不会存储结果或图片数据。该 AP

    2024年02月13日
    浏览(28)
  • Android Google马甲包处理

    这是整理其他人的plugin代码,最后有亮点,耐心看下吧 gradle文件增加以下代码 root.gradle 在人家的基础上 1、我优化了名字的随机性 2、androidJunkCode这个感觉意义不到,基于asm我自己定义了一版逻辑 这是我处理后的结果,插入了很多无用代码在每个方法上  3、stringfog优化支持

    2024年02月07日
    浏览(35)
  • Google Play发布android app

    本博文只是简单记录使用流程 操作时间是2023.1.12日,后续查看该博文,可能会发现因为Google Play Console版本升级带来操作使用上的差异 google play官方指导 https://support.google.com/googleplay/android-developer/answer/9859152?hl=zh-Hans] 浏览器登录google账户后,如果没有开发者账户,则需要注册开

    2024年02月05日
    浏览(42)
  • 【Android】SVGAPlayer的使用介绍

    客户需要通过SVG来做直播场景的炫酷动画。故调用得到如下的工具库: GIthub-SVAGPlayer 通过xml组装到 项目中,然后调用提供的api 实现自己的需求即可。 SVGAPlayer-Android是一个用于在Android应用中播放SVGA(Scalable Vector Graphics Animation)动画的库。它支持矢量动画和帧动画,并提供了

    2024年02月07日
    浏览(28)
  • Android平台HWASan使用介绍

    Hardware Address Sanitizer (HWASan)是应在开发期间使用的内存 bug 检测工具。对于 arm64,建议使用 HWASan;对于 32 位 arm 和非 Arm 平台,建议使用 ASan。两者提供的功能相同,并且都应当用于检测用户空间代码中的内存安全 bug。 在Android系统编译时加入如下配置: 在Rockchip的Android11及以

    2024年02月14日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包