在使用WorkManager的时候,有时候需要关注任务执行的结果和状态,可以使用

LiveData<WorkInfo> liveOpStatus = WorkManager.getInstance(context)
.getWorkInfoByIdLiveData(request.getId());
得到一个WorkInfo的LiveData,然后观察它的任务的执行状态及返回结果。这里有一个问题,LiveData的observer需要两个参数,一个是LifecycleOwner,另一个是Observer<? super T> observer。observer是处理任务状态的函数,这个好办。
LifecycleOwner就比较麻烦一点,除非我们是在Activity或者Fragment中,否则就没有LifecycleOwner,比如在一个单例中,我想到两个办法:
一个是使用全局的生命周期,
ProcessLifecycleOwner.get()
这个需要引用一个库
implementation 'androidx.lifecycle:lifecycle-process:2.2.0-alpha04'
或者是自己构造一个LifecycleOwner,这个想法比较奇葩,但是我试过可以用
new LifecycleOwner(){
@NonNull
@Override
public Lifecycle getLifecycle() {
return new Lifecycle() {
@Override
public void addObserver(@NonNull LifecycleObserver observer) { } @Override
public void removeObserver(@NonNull LifecycleObserver observer) { } @NonNull
@Override
public State getCurrentState() {
return State.CREATED;
}
};
}
};

用法写完了,但是我用的时候总感觉哪地方不太对,因为我觉得observer用完之后 没有removeObserver,心里总觉得不太爽,于是我找到了另一个用法,比如在单例模式下,定义一个全局的MediatorLiveData

final MediatorLiveData<WorkInfo> liveWorkStatus = new MediatorLiveData<>();

每次执行任务的时候把它的观察对象liveOpStatus放到liveWorkStatus中

liveWorkStatus.addSource(liveOpStatus, new Observer<WorkInfo>() {
@Override
public void onChanged(WorkInfo workInfo) {
liveWorkStatus.setValue(workInfo);
WorkInfo.State state = workInfo.getState();
if (state.isFinished()) {
liveWorkStatus.removeSource(liveOpStatus);
}
}
});

每次执行完任务就把这个LiveData从全局的观察对对象中删除掉。而单例对象是和进程同生共死的,所以可以用全局的LifecycleOwner,也就是ProcessLifecycleOwner。

还有一个比较有意思的东西,回头再写出来。

参考https://www.codota.com/web/assistant/code/rs/5c7c468fac38dc0001e26004#L30

												

Android Jetpack之WorkManager: 观察结果的更多相关文章

  1. 学习Android Jetpack? 入门教程和进阶实战这里全都有!

    前言 2018年谷歌I/O,Jetpack横空出世,官方介绍如下: Jetpack 是一套库.工具和指南,可帮助开发者更轻松地编写优质应用.这些组件可帮助您遵循最佳做法.让您摆脱编写样板代码的工作并简 ...

  2. 带你了解Android Jetpack

    1.Jetpack主要特性有以下三点: 1.加速开发组件可单独使用,也可以协同工作,当使用kotlin语言特性时,可以提高效率. 2.消除样板代码Android Jetpack可管理繁琐的Activi ...

  3. Android Jetpack组件

    带你领略Android Jetpack组件的魅力 Android新框架jetpack的内容讲解:Room.WorkManager.LifeCycles.LiveData.ViewModel.DataB ...

  4. Android Jetpack之AppCompat(一)

    今天我们来聊一聊有关AppCompat,作为Android Jetpack系列文章的开篇.说到Android Jetpack,我们先看一下这张图: 从图中我们可以看到,整个Android Jetpac ...

  5. Android Jetpack 组建介绍(二)——Lifecycler

    参考Android Jetpack架构组件之 Lifecycle(源码篇) 源码分析 关于Lifecycle的使用考上一篇文章Android Jetpack框架之 Lifecycles(使用篇),从使 ...

  6. Android Jetpack 组建介绍(一)——Lifecycler

    转自带你领略Android Jetpack组件的魅力 Android Jetpack 对于任何一个产品来说,我们开发中都会面对哪些问题?如:产品交互.用户体验.代码结构.数据获取.数据存储.网络优化. ...

  7. Android Jetpack 概述

    Android Jetpack Overview Android Jetpack Jetpack is a set of libraries, tools and architectural guid ...

  8. Android Jetpack - 使用 Navigation 管理页面跳转

    在今年的 IO 大会上,发布了一套叫 Android Jetpack 的程序库.Android Jetpack 里的组件大部分我们都接触过了,其中也有一些全新的组件,其中一个就是 Navigation ...

  9. Android Jetpack组件之Lifecycles库详解

    Android Jetpack 组件是库的集合,这些库是为了协同工作而构建的,不过也可以单独采用,接下来会一一详细地学习这些库, 下面源码版本是com.android.support:appcompa ...

随机推荐

  1. 纯CSS,table的thead固定,tbody显示滚动条

    以下代码,仅在谷歌下测试过 首先是html的table的代码: <table class="tablediv" id="myTable" border=& ...

  2. Qt编写自定义控件18-魔法小鱼

    前言 上次发了个纯painter绘制的老鼠,那个就是qt目录下的demo,改的,只是比demo中的老鼠稍微胖一点,估计人到中年都发福吧.这次来一个魔法小鱼,这条鱼可以变换颜色,尾巴还会摇动,可以设定旋 ...

  3. 搭建Kubernetes容器集群管理系统

    1.Kubernetes 概述 Kubernetes 是 Google 开源的容器集群管理系统,基于 Docker 构建一个容器的调度服务,提供资源调度.均衡容灾.服务注册.劢态扩缩容等功能套件. 基 ...

  4. Spring-Kafka —— KafkaListener禁止自启动

    应用服务启动时,KafkaListener默认会自动启动进行消费,如果想不自动消费,可以设置AutoStartup属性值为false @Override @KafkaListener(id = Con ...

  5. 安装php的sphinx扩展模块

    转自 http://blog.csdn.net/fenglailea/article/details/38115821 首先你必须已经安装过了sphinx 如何安装sphinx请看:http://bl ...

  6. C++中非数nan的定义与范例

    /* * C++中非数的定义 NaN :阶码的每个二进制位全为1  并且  尾数不为0: 无穷:阶码的每个二进制位全为1  并且  尾数为0:符号位为0,是正无穷, 符号位为1是负无穷.所以NaN.正 ...

  7. PTA --- L1-006 连续因子

    题目地址 一个正整数 N 的因子中可能存在若干连续的数字.例如 630 可以分解为 3×5×6×7,其中 5.6.7 就是 3 个连续的数字.给定任一正整数 N,要求编写程序求出最长连续因子的个数,并 ...

  8. 刀塔OMG塔防1.23单机版使用方法

    使用方法1.确保魔兽的版本为1.26(低版本会报错),如果版本不对用附件中的版本转换器转一下2.把 omg.w3x 复制到 魔兽的MAPS文件夹 WarcraftIII 游戏根目录\Maps3.双击运 ...

  9. 英特尔®oneAPI简介及动手实验研讨会召集令

    Intel Developer Zone 2019年超级计算大会英特尔正式发布了oneAPI软件行业计划及其beta产品,在上篇文章中我们已为您介绍了oneAPI的基本含义,本文将继续为您介绍oneA ...

  10. 关于js中this指向的问题

    this的绑定规则有4种 默认绑定 隐性绑定 显性绑定 new绑定 this绑定优先级 new 绑定 > 显性绑定 > 隐性绑定 > 默认绑定 1.如果函数被new 修饰 this绑 ...