Android Jetpack组件(八)WorkManager

Android Jetpack WorkManager 基础 hl=zh-cnWorkManager是一个Android Jetpack库,用于在满足特定约束条件下,在后台执行可延迟的、异步的任务。它能够有效地管理后台工作任务,确保任务在合适的时机执行,同时也考虑到了电池优化、设备资源管理等因素。立即执行:必须立即开始且很快就完成的任务,可以加急。长时间运行:运行时间可能较长(有可能超过 10 分钟)的任务。可延期执行:延期开始并且可以定期运行的预定任务。 阅读详情

Android Jetpack组件系列文章:
Android Jetpack组件(一)LifeCycle
Android Jetpack组件(二)Navigation
Android Jetpack组件(三)ViewModel
Android Jetpack组件(四)LiveData
Android Jetpack组件(五)Room
Android JetPack组件(六)DataBinding
Android Jetpack组件(七)Paging
Android Jetpack组件(八)WorkManager
Android Jetpack组件(九)DataStore

首语

Android应用中大部分都需要执行后台任务,因此也提供了多种解决方案,如JobScheduler、Loader等。但不合理的使用这些API,会造成消耗大量电量。JetPack中的WorkManager为应用程序执行后台任务提供了 一个统一的解决方案。
WorkManager可以自动维护后台任务的执行时机,执行顺序,执行状态。

特点

  1. 兼容范围广
    WorkManager最低能兼容API Level 14,并且不需要你的设备安装Google Play Services。因此,不必担心兼容性的问题。
    WorkManager能根据设备的情况,选择不同的执行方案。在API Level23以上的设备中,通过JobScheduler完成任务;在API Level23以下的设备中,通过AlarmManager和Broadcast Receiver组合来执行任务,无论哪种方案,任务最终都是交给Executor来执行的。
    注: WorkManager并不是一种新的工作线程,工作线程通常立即执行,而WorkManager不能保证任务被及时执行。
  2. 任务一定会被执行
    WorkManager能保证任务一定会被执行,即使应用程序不在运行中,甚至是在设备重启后,任务仍然会在适当的时刻执行,这是因为WorkManager有自己的数据库,任务的所有信息和数据都保存在数据库中。
    注: WorkManager宣称能够保证任务得到执行,但是在非Android原生系统的真是设备上进行测试发下,应用彻底退出和设备重启后,任务没有再次被执行。这也是Android的碎片化所导致的,许多厂商修改了手机ROM,造成不能得到执行,因此,分析需求是否可以使用WorkManager。
  3. 针对不需要及时完成的任务
    例如,发送应用日志、同步应用数据,备份应用数据等。这些任务不需要立刻被执行。

依赖

dependencies {
  def work_version = "2.5.0"

    // (Java only)
    implementation "androidx.work:work-runtime:$work_version"

    // Kotlin + coroutines
    implementation "androidx.work:work-runtime-ktx:$work_version"

    // optional - RxJava2 support
    implementation "androidx.work:work-rxjava2:$work_version"

    // optional - GCMNetworkManager support
    implementation "androidx.work:work-gcm:$work_version"

    // optional - Test helpers
    androidTestImplementation "androidx.work:work-testing:$work_version"

    // optional - Multiprocess support
    implementation "androidx.work:work-multiprocess:$work_version"
  }

任务构建

项目开发中有这样的需求;任务A执行完再执行C,任务B执行完再执行D;任务A、B、C、D都执行完成后再执行E。那么可以利用WorkManager.beginWith().then().then...enqueue()的方式构建任务链。

WorkContinuation left,right;
left=WorkManager.getInstance(this).beginWith(A).then(C);
right=WorkManager.getInstance(this).beginWith(B).then(D);
WorkContinuation.combine(Arrays.asList(left,right)).then(E).enqueue();

任务构建

状态通知

WorkManager的每个任务都有以下几种状态:
BLOCKED表示任务被阻塞;ENQUEUED表示刚加入执行队列;RUNNING表示任务正在被执行,其中SUCCESSED、CANCELED、FAILED表示任务执行成功、取消执行和执行失败;FINISHED表示任务结束。

任务控制

		//通过ID取消单个任务
        WorkManager.getInstance(this).cancelWorkById(UUID);
        //通过tag取消所有任务
        WorkManager.getInstance(this).cancelAllWorkByTag(tag);
        //通过任务名取消唯一任务
        WorkManager.getInstance(this).cancelUniqueWork(workName);
        //取消所有任务
        WorkManager.getInstance(this).cancelAllWork();

类关系

  1. Worker
    任务的执行者,是一个抽象类,需要继承它实现要执行的任务。
  2. WorkRequest
    指定让哪个Woker执行任务,指定执行的环境,执行的顺序等。要使用它的子类OneTimeWorkRequest或PeriodicWorkRequest。
  3. WokManager
    管理任务请求和任务队列,发起的WorkRequest会进入它的任务队列。
  4. WorkStatus
    包含有任务的状态和任务的信息,以LiveData的形式提供给观察者。

使用

创建任务

使用Worker类定义任务,复写doWork(),在doWork()里执行耗时任务。

public class UploadFileWorker extends Worker {
    public UploadFileWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
        super(context, workerParams);
         setProgressAsync(new Data.Builder().putInt(PROGRESS, 0).build());
    }

    @NonNull
    @Override
    public Result doWork() {
        //设置任务进度
        setProgressAsync(new Data.Builder().putInt("progress", 100)
                .build());
        return Result.success();
    }
}

输入参数

任务执行过程中可能需要传递一些参数,通过{key,value}的形式添加到Data中。

	@Override
    public Result doWork() {
        //接收从外面传递进来的数据
        Data inputData = getInputData();
        String filePath = inputData.getString("file");
        String fileUrl = FileUploadManager.upload(filePath);
        //任务完成后返回数据
        if (TextUtils.isEmpty(fileUrl)) {
            return Result.failure();
        } else {
            Data outputData = new Data.Builder().putString("fileUrl", fileUrl)
                    .build();
            return Result.success(outputData);
        }
    }

需要注意的是,在Data源码中发现,Data传递的数据最大不能超过10KB,因此Data只能传递一些小的基本类型的数据。

	/**
     * The maximum number of bytes for Data when it is serialized (converted to a byte array).
     * Please see the class-level Javadoc for more information.
     */
    public static final int MAX_DATA_BYTES = 10 * 1024;    // 10KB
使用WorkRequest配置任务

WorkRequest 本身是抽象基类。该类有两个实现类,可用于创建 OneTimeWorkRequest 和 PeriodicWorkRequest 请求。OneTimeWorkRequest 适用于调度非重复性工作,而 PeriodicWorkRequest 则更适合调度以一定间隔重复执行的工作。

  • OneTimeWorkRequest
    对于无需额外配置的简单工作,请使用静态方法 from。
 WorkRequest myWorkRequest = OneTimeWorkRequest.from(MyWork.class);

对于比较复杂的任务,可以使用构建器。

  WorkRequest uploadWorkRequest =
        new OneTimeWorkRequest.Builder(MyWork.class)
            // Additional configuration
            .build();
  • PeriodicWorkRequest
    应用有时可能需要定期运行某些工作。例如,需要定期备份数据、或者定期上传日志到服务器。
 //任务的运行时间间隔定为一小时
     PeriodicWorkRequest saveRequest =
            new PeriodicWorkRequest.Builder(SaveImageToFileWorker.class, 1, TimeUnit.HOURS)
                // Constraints
                .build();

时间间隔定义为两次重复执行之间的最短时间。工作器的确切执行时间取决于您在 WorkRequest 对象中设置的约束以及系统执行的优化。
需要注意的是定义的最短重复间隔是 15 分钟,在源码中也可以看到。

/**
  * The minimum interval duration for {@link PeriodicWorkRequest} (in milliseconds).
  */
public static final long MIN_PERIODIC_INTERVAL_MILLIS = 15 * 60 * 1000L; // 15 minutes.

如果对任务的执行实际比较敏感,可以将PeriodicWorkRequest 配置为在每个时间间隔的灵活时间段内执行。

  //每小时的最后15分钟内执行的定期任务
     WorkRequest saveRequest =
            new PeriodicWorkRequest.Builder(SaveImageToFileWorker.class,
                    1, TimeUnit.HOURS,
                    15, TimeUnit.MINUTES)
                .build();

定义的最短灵活间隔是5分钟,在源码中也可以看到。

/**
  * The minimum flex duration for {@link PeriodicWorkRequest} (in milliseconds).
  */
public static final long MIN_PERIODIC_FLEX_MILLIS = 5 * 60 * 1000L; // 5 minutes.

在执行任务之前,我们可以对任务添加各种约束,使其满足约束条件后才执行任务。通过Contraints.Builder()创建Constraints 实例。

  Constraints constraints = new Constraints.Builder()
                //设备存储空间充足的时候 才能执行 ,>15%
                .setRequiresStorageNotLow(true)
                //必须在执行的网络条件下才能好执行,不计流量 ,wifi
                .setRequiredNetworkType(NetworkType.UNMETERED)
                //设备的充电量充足的才能执行 >15%
                .setRequiresBatteryNotLow(true)
                //只有设备在充电的情况下 才能允许执行
                .setRequiresCharging(true)
                //只有设备在空闲的情况下才能被执行 比如息屏,cpu利用率不高
                .setRequiresDeviceIdle(true)
                //workmanager利用contentObserver监控传递进来的这个uri对应的内容是否发生变化,当且仅当它发生变化了
                //设置从content变化到被执行中间的延迟时间,如果在这期间。content发生了变化,延迟时间会被重新计算
                .setTriggerContentUpdateDelay(Duration.ZERO)
                //设置从content变化到被执行中间的最大延迟时间
                .setTriggerContentMaxDelay(Duration.ZERO).build();

再将Constraint实例设置到OneTimeWorkRequest中去。

OneTimeWorkRequest request = new OneTimeWorkRequest
                .Builder(UploadFileWorker.class)
                .setInputData(inputData)
                .setConstraints(constraints)
                //对任务添加标记
                .addTag("tag")
    			//设置延迟执行时间
                .setInitialDelay(10,TimeUnit.SECONDS)
                //设置一个拦截器,在任务执行之前 可以做一次拦截,去修改入参的数据然后返回新的数据交由worker使用
                .setInputMerger(null)
                //当一个任务被调度失败后,所要采取的重试策略,可以通过BackoffPolicy来执行具体的策略
                .setBackoffCriteria(BackoffPolicy.EXPONENTIAL, 10, TimeUnit.SECONDS)
                //任务被调度执行的延迟时间
                .setInitialDelay(10, TimeUnit.SECONDS)
                //设置该任务尝试执行的最大次数
                .setInitialRunAttemptCount(2)
                //设置这个任务开始执行的时间
                //System.currentTimeMillis()
                .setPeriodStartTime(0, TimeUnit.SECONDS)
                //指定该任务被调度的时间
                .setScheduleRequestedAt(0, TimeUnit.SECONDS)
                //当一个任务执行状态变成finish时,又没有后续的观察者来消费这个结果,那么workmanager会在
                //内存中保留一段时间的该任务的结果。超过这个时间,这个结果就会被存储到数据库中
                //下次想要查询该任务的结果时,会触发workmanager的数据库查询操作,可以通过uuid来查询任务的状态
                .keepResultsForAtLeast(10, TimeUnit.SECONDS)
                .build();
fileUploadUUID = request.getId();
将任务提交给系统
 		WorkContinuation workContinuation = WorkManager.getInstance(this).beginWith(workRequests);
        workContinuation.enqueue();
监听执行状态和结果

任务提交给系统后,可以通过WorkInfo获知任务的状态。WorkInfo包含任务的id、tag和worker对象传递过来的outputData,以及任务当前的状态。有三种方式可以得到WorkInfo对象。

 WorkManager.getInstance(this).getWorkInfoById(UUID);
 WorkManager.getInstance(this).getWorkInfosByTag(tag);
 WorkManager.getInstance(this).getWorkInfosForUniqueWork(workName);

实时获取任务的状态也有三种方法。

 WorkManager.getInstance(this).getWorkInfoByIdLiveData(UUID);
 WorkManager.getInstance(this).getWorkInfosByTag(tag);
 WorkManager.getInstance(this).getWorkInfosForUniqueWorkLiveData(workName);

通过LiveData,我们便可以在任务状态发生变化时收到通知。

 WorkManager.getInstance(this).getWorkInfoByIdLiveData(fileUploadUUID).observe(this, new Observer<WorkInfo>() {
            @Override
            public void onChanged(WorkInfo workInfo) {
                WorkInfo.State state = workInfo.getState();
                if (state == WorkInfo.State.FAILED) {
                    //失败
                } else if (state == WorkInfo.State.SUCCEEDED) {
                    //成功
                }
                workInfo.getProgress();
                workInfo.getId();

            }
        });
 workContinuation.getWorkInfosLiveData().observe(PublishActivity.this, new Observer<List<WorkInfo>>() {
            @Override
            public void onChanged(List<WorkInfo> workInfos) {
             for (WorkInfo workInfo : workInfos) {	
                    WorkInfo.State state = workInfo.getState();
                    Data outputData = workInfo.getOutputData();
                    UUID uuid = workInfo.getId();
             }
 });
Android架构组件JetPack之WorkManager完全解析(五)(1) 对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长。而不成体系的学习效果低效漫长且无助。时间久了,付出巨大的时间成本和努力,没有看到应有的效果,会气馁是再正常不过的。所以学习一定要找到最适合自己的方式,有一个思路方法,不然不止浪费时间,更可能把未来发展都一起耽误了。如果你是卡在缺少学习资源的瓶颈上,那么刚刚好我能帮到你。《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取! 阅读详情

相关推荐

Android Jetpack架构组件之WorkManger

1、前言 最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发中的问题,对代码的逻辑和UI界面实现深层解耦,打造数据驱动型UI界面。 Android Architecture组件是Android Jetpack的一部分,它们是一组库,旨在帮助开发者设计健壮、可测试和可维护的应用程序,包含一下组件:  带你领略Android Je...

浅谈Android 4905

Android Jetpack 的WorkManager的使用简介

222

weixin_42324979的博客 736

Android Jetpack 组件

另外,由于要减少性能消耗,当Activity处于不可见状态的时候(比如手机息屏,或者被其他的Activity遮挡),如果LiveData中的数据发生了变化,是不会通知给观察者的。还有一个小细节,如果在Activity处于不可见状态的时候,LiveData发生了多次数据变化,当Activity恢复可见状态时,只有最新的那份数据才会通知给观察者,前面的数据在这种情况下相。map()方法,这个方法的作用是将实际包含数据的LiveData和仅用于观察数据的LiveData进行转换。

编程小鹏的博客 1174

Android Jetpack组件之WorkManager后台任务管理的介绍与使用(二)

我们可以弄清楚workmanager从接入到使用的基本流程。基本可以满足我们日常。那只是简单的入门。如果遇到更复杂的功能,那简单的就无法满足

2279

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

上面的调用,从worker的提交,到job的具体执行,绕了一圈,我们画个图梳理一下。SerialExecutor的知识应用,当我们想要控制一个任务队列中的任务,串行执行时,可以使用这样的实现方案,但是,我们需要知道,这样有一个坏处就是,达不到并发的目的了。Provider可以用于初始化init函数的调用,当我们在设计一些框架时,为了简化使用者的调用步骤,可以使用Provider的方案。

itbird的专栏 3207

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

本文,我们对于WorkManager的初始化、任务入队的源码进行了深入的解读,学到了WorkManager的初始化,和MMKV、VirtualAPK、LeakCanary这些第三方框架源码一样,都使用了Provider初始化的设计方案,发现这真是一个好处,就是使用了manifest注册时,PackageParse会解析其中的四大组件,然后在AMS中进行信息初始化,那么此时Provider就会进行初始化,所以使用了这个特性。

itbird的专栏 1123

Jetpack系列之WorkManager 任务管理

WorkManager 概述:WorkManager 可以自动维护后台链式任务的执行时机、执行状态。WorkManager 一般用于多文件上传,复杂计算,多流程控制等。Data的优势: 1)一组持久的键(字符串)/ 值(字符串、基本元素或其数组变量)对,用作ListenableWorkers的输入和输出;2)有效负载的串行化(字节数组)大小限制10KB;3)支持序列化和反序列化持久操作,更轻量级(轻量级HashMap)。// 同时执行A(先)->B(后)、C(先)->D(后), 最后执行E。

JAVE_LOVER 568

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

本文,我们对Jetpack的调度任务组件WorkManager ,由使用入手,对其源码进行深入学习、总结一下。

itbird的专栏 2350

(两百六十五)学习使用 WorkManager 调度任务

学习https://developer.android.google.cn/topic/libraries/architecture/workmanager/basics 使用 WorkManager 调度任务 使用 WorkManager API 可以轻松地调度即使在应用退出或设备重启时仍应运行的可延迟异步任务。 主要功能: 最高向后兼容到 API 14 在运行 API 23 及以上级别的设备上使用 JobScheduler 在运行 API 14-22 的设备上结合使用 Broadc.

JT的专栏 1594

香橙派5b 移植 imx415

修改设备树,以为例,关闭ov13855,添加imx4151;0;1;0;1;0;1;0;1;0;1;0;1;0;以此类推,修改三个dtsi。

ChenYX的博客 4528

【电子元件篇】电容的九大作用与选型指南-超简单解读

本文系统介绍了电容的基础概念、核心功能及实际应用。电容作为存储电荷的被动元件,其容值公式为C=Q/V,单位包括法拉及常用派生单位。文章重点解析了电容的九大功能:滤波(通过RC低通电路抑制噪声)、耦合(传递交流隔离直流)、去耦(稳定供电)、储能(短暂供电)、定时(RC延时)、谐振(RLC振荡)、旁路(高频通路)、电压调节(DC-DC转换)以及保护(吸收浪涌)。同时详细阐述了电容分类(陶瓷/电解/薄膜等)、参数选型要点(耐压/容值/精度/温度)及PCB设计注意事项,并针对不同应用场景提供了具体选型建议和常见误区

2301_81299416的博客 4004

Android Jetpack(10):WorkManager

WorkManager介绍 作为 Android Jetpack 中的新组件,WorkManager 负责用来管理后台任务,说简单点是和异步任务Task或者 Service 作用一样,都可以处理异步任务或后台任务。 WorkManager用于支持Android在后台的任务运行,提供延迟、周期性,约束性需求的后台任务。任务是交给系统统一调度的,适合一些轻量级的后台功能使用。还能支持在Doze模式下运行后台任务,WorkManager会在Doze模式的窗口期运行任务。 WorkManager的设计用意就是取代后

qq_36699930的博客 1301

Mendix 开发实践指南|Mendix平台概览

低代码开发是一种将编码从文本形式转变为视觉形式的应用开发方法。它提供了一个模型驱动的、拖放式的界面,而不是传统的编码环境,使得各种技能水平的开发者——包括专业开发人员、新手、主题专家、业务利益相关者和决策者——都能使用低代码工具来构建驱动价值的企业业务应用。低代码的核心在于提高开发的可访问性和效率,让更多人能够参与到应用开发中来​​。Mendix适用于多种应用场景,包括企业级应用、移动应用、物联网(IoT)应用和微服务架构等。

多年搬砖的经验分享... 4413

Android Jetpack架构组件(八)WorkManager使用篇

前言 WorkManager是Jetpack很重要的一个组件,本篇我们就先来讲讲它是如何使用的,在讲解之前我们先了解关于后台处理的一些痛点。 后台处理指南 我们知道每个 Android 应用都有一个主线程,它负责处理界面(包括测量和绘制视图)、协调用户互动以及接收生命周期事件。如果有太多工作在主线程中进行,则应用可能会挂起或运行速度变慢,从而导致用户体验不佳。任何长时间运行的计算和操作(例如解...

周将的博客 2657

优快云余额充值前必读:这5个隐藏条款,90%的开发者都忽略了(附iOS内购避坑指南)

本文揭示了优快云余额充值中90%开发者忽略的5个隐藏条款,包括不可退款规则、iOS内购限制、账号安全责任等关键内容,特别提供了iOS内购避坑指南,帮助开发者避免资金损失和账号风险。

weixin_26765287的博客 146

保姆级教程:用GATK4分析重测序数据,从fq.gz到vcf文件一步不落

本文提供了一份详细的GATK4重测序数据分析教程,涵盖从原始fq.gz文件到最终vcf文件的完整上游分析流程。通过Miniconda环境配置、数据质控、序列比对、变异检测等步骤的逐步指导,帮助生物信息学研究人员掌握标准流程,特别适合Linux命令行基础薄弱的研究者学习实践。

weixin_28366053的博客 472

带你领略Android Jetpack组件的魅力

1、前言 最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发中的问题,对代码的逻辑和UI界面实现深层解耦,打造数据驱动型UI界面。 Android Architecture组件是Android Jetpack的一部分,它们是一组库,旨在帮助开发者设计健壮、可测试和可维护的应用程序,包含一下组件:  带你领略Android Je...

浅谈Android 3万+

TBOX电源方案的详细讲解与分析

输入保护电路是确保车载电子系统稳定性的关键。通过合理选择TVS二极管、保险丝和浪涌抑制器等元器件,能够有效防止来自电源系统的瞬态过电压、浪涌和过流问题,保护后续电路免受损害。针对不同的电源环境和应用场景,可以通过提升功率、优化热管理以及选择高效元器件来进一步提高系统的保护能力和可靠性。

weixin_43199439的博客 1070

Android Jetpack 组件库 ->WorkManager

WorkManager是Android官方推荐的后台任务调度框架,解决了传统方式手动管理后台任务的诸多问题。它通过声明式任务调度,自动处理系统限制(如Doze模式、电池优化),保证任务最终执行,并支持约束条件、自动重试和链式任务。核心组件包括WorkManager(调度器)、WorkRequest(任务请求)、Worker(执行者)和WorkInfo(任务状态)。WorkManager支持一次性任务、周期性任务和链式任务,开发者可通过设置约束条件、输入输出数据等实现灵活控制。相比传统方案,WorkManag

Mark Wu 的博客 1288

基于STM32设计的盲人智能导盲杖

本设计基于STM32单片机,开发了一种面向视障人群的智能导盲杖系统。系统以STM32F103C8T6为核心控制器,集成了超声波测距、语音提示、环境光检测、GPS定位及4G通信等多种功能模块。

640

DSP篇--C6678功能调试系列之EDMA3调试

EDMA主要用于数据的搬运,发送、接收,其搬运数据的形式有;AB模式,ABC模式以及ping-pong模式。 EDMA3分初始化、参数配置、以及中断配置。其中中断配置则需要注意的内容主要有:挂载的TC通道,对应的触发事件,以及中断的使能。

nanke_yh的博客 1720

Android Jetpack架构组件之WorkManager入门

——你可以失望,但不能绝望。累的时候可以慢一点,千万不要后退,你还没有拼劲全力。怎么知道没有奇迹。 前言 ——这篇主要是梳理一下Jetpack架构组件之一的Navigation,并结合楼主所学做个总结。面向那些还没接触Navigation的同学们。看完这篇可以快速了解它,并轻松使用。也想请教前辈们指点文章中的错误或不足的地方。本篇只描述Navigation,不会拓展额外的知识,...

斌林诚上的博客 1015

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Android Jetpack组件:WorkManager的使用

WorkManager 是一个用于在后台执行任务的 API,它提供了一种简单、灵活的方式来调度和管理后台任务。WorkManager 允许开发者在应用退出后继续执行任务,并且能够在满足特定条件时开始任务,如网络连接、设备空闲等。WorkManager 作为 Android Jetpack 组件之一,为开发者提供了简单、灵活的后台任务处理方案。通过本文的介绍,我们了解了 WorkManager 的核心概念、使用方法以及进阶应用。

2501_92487619的博客 999

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Android Jetpack(八)WorkManager

WorkManager

Fighting_初心的博客 715

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Android架构之WorkManager组件

Workmanager的作用 绝大部分应用程序都有在后台执行任务的需求。根据需求的不同,Android为后台任务提供了多种解决方法,如JobScheduler、Loader、Service等。 如果这些API没有被恰当地使用,则可能会消耗大量的电量。Android在解决应用程序耗电问题上做出了各种尝试,从Doze到App Standby,通过各种方法限制和管理应用程序,以保证应用程序不会再后台过分消耗设备的电量。WorkManager为应用程序中那些不需要及时完成的任务提供了一个统一的解决方法,以便在设备电

qq_43404873的博客 1916

Android Jetpack架构-WorkManager使用篇

一. 定义: 作为 Android Jetpack 中的新组件,WorkManager 负责用来管理后台任务,说简单点则和异步任务Task或者 Service 作用一样,都可以处理异步任务或后台任务。 核心类介绍 先来介绍下WorkManager中涉及到的想关类 Worker 任务的执行者,是一个抽象类,需要继承它实现要执行的任务。 WorkRequest 指定让哪个 Woker 执行任务...

One X的博客 1754
上一篇: Android JetPack组件(六)DataBinding
下一篇: Android Jetpack组件(七)Paging
八归少年
八归少年 新星创作者: 操作系统技术领域 新星创作者: 操作系统技术领域
博客等级 码龄9年 9011粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

八归少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值