LiveData详细分析2

2023-11-12

  一:LiveData是什么东西
1.基于观察者设计模式
LiveData是一种持有可被观察数据的类(被观察者)。LiveData需要一个观察者对象,一般是Observer类的具体实现。当观察者的生命周期处于STARTED或RESUMED状态时,LiveData会通知观察者数据变化。
2.LiveData能够感知activities/fragments/services生命周期
LiveData能够感知当activities/fragments/ services生命周期处于活跃状态(STARTED和RESUMED)时,才会通知这些组件更新数据变化。
3.LiveData能够自动解除数据订阅

二:LiveData的优点缺点
 优点:
1UI和实时数据保持一致
 因为LiveData采用的是观察者模式,这样一来就可以在数据发生改变时获得通知,更新UI。
2不会发生内存泄露
 观察者被绑定到组件的生命周期上,当被绑定的组件销毁(onDestroy)时,观察者会立刻自动清理自身的数据。
3不会再产生由于Activity处于stop状态而引起的崩溃
    例如:当Activity处于后台状态时,是不会收到LiveData的任何事件的。
4不需要再解决生命周期带来的问题
 LiveData可以感知被绑定的组件的生命周期,只有在活跃状态才会通知数据变化。
5实时数据刷新
  当组件处于活跃状态或者从不活跃状态到活跃状态时总是能收到最新的数据
6数据共享
 如果对应的LiveData是单例的话,就能在app的组件间分享数据。这部分详细的信息可以参考继承LiveData

 缺点:

三:LiveData的使用步骤
⒈创建一个持有某种数据类型的LiveData (通常是在ViewModel中)
⒉创建一个定义了onChange()方法的观察者。这个方法是控制LiveData中数据发生变化时,采取什么措施 (比如更新界面)。通常是在UI Controller (Activity/Fragment) 中创建这个观察者。
⒊通过 observe()方法连接观察者和LiveData。observe()方法需要携带一个LifecycleOwner类。这样就可以让观察者订阅LiveData中的数据,实现实时更新。


四:LiveData与MutableLiveData区别
LiveData与MutableLiveData的其实在概念上是一模一样的.唯一几个的区别如下:
MutableLiveData的父类是LiveData
LiveData在实体类里可以通知指定某个字段的数据更新.
MutableLiveData则是完全是整个实体类或者数据类型变化后才通知.不会细节到某个字段


五:LiveData 的 observe()和observerForever()区别
  observe():当数据更新后,LiveData 会通知它的所有活跃的观察者(例如 Activity 位于 Destroyed 状态时是不活跃的,因此不会收到通知)。
observerForever() :不会受到 Activity 等组件的生命周期的影响,只要数据更新就会收到通知。

六:


LiveData常见使用场景
   1.单独使用LiveData

首先创建一个 MutableLiveData(LiveData是抽象类)对象 ,通过 observe 方法可以订阅修改数据的通知,通过 postValue()或者 setValue() 方法发送事件更新数据,已经订阅的 Observer 能够得到数据更改的通知,就会回调 onChanged() 方法。

liveData = new MutableLiveData<>();
liveData.observe(this, new Observer<String>() {
    @Override
    public void onChanged(@Nullable final String newText) {
        // 更新数据
        tv3.setText(newText);
    }
});
liveData.setValue("小杨真的是一个逗比么");
 

2. LiveData配合ViewModel使用

private  TextViewModel model ;
 private void initLiveData() {
    //  创建ViewModel对象
    model = ViewModelProviders.of(this).get(TextViewModel.class);
    // 创建一个定义了onChange()方法的观察者对象nameObserver 
    // 开始订阅
    final Observer<String> nameObserver = new Observer<String>() {
        @Override
        public void onChanged(@Nullable final String newText) {
            // 更新数据
            tvText.setText(newText);
        }
    };
    //创建LiveData对象
     MutableLiveData<String>  mCurrentTextLiveData= model.getCurrentText();
    // 通过 observe()方法连接观察者和LiveData,注意:observe()方法需要携带一个LifecycleOwner类
   mCurrentTextLiveData .observe(this, nameObserver);
}

 LiveData是一个数据的包装。具体的包装对象可以是任何数据,包括集合。它是一个抽象类,首先先创建一个类实现LiveData。

public class TextViewModel extends ViewModel {

    /**
     * LiveData是抽象类,MutableLiveData是具体实现类
     */
    private MutableLiveData<String> mCurrentText;

    public MutableLiveData<String> getCurrentText() {
        if (mCurrentText == null) {
            mCurrentText = new MutableLiveData<>();
        }
        return mCurrentText;
    }

}


https://mp.weixin.qq.com/s/kcd0T3zwnfXA9b6_L2lzjA

https://mp.weixin.qq.com/s/MGjK0mXUmmW1P-u6vbGjLA

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LiveData详细分析2 的相关文章

  • ViewBinding - Jetpack 视图绑定委托封装及使用示例

    通过视图绑定功能 xff0c 您可以更轻松地编写可与视图交互的代码 在模块中启用视图绑定之后 xff0c 系统会为该模块中的每个 XML 布局文件生成一个绑定类 绑定类的实例包含对在相应布局中具有 ID 的所有视图的直接引用 在大多数情况下
  • Jetpack学习-6-Viewbinding使用及简单分析

    Jetpack可以帮助开发者减少样板代码 而findviewbyId正是需要减少的样板代码 于是就有了ViewBinding 一开始我细看Jetpack的各个组件我是懵的 里面没有ViewBinding 这不好把它归纳到Jetpack系列中
  • 【Android Jetpack系列】一、ViewBinding的使用

    关于本系列的说明 作为学习Jetpack的系列文章 可能会更新得很慢 本系列文或者应该称之为学习笔记 观看本文的同学 应该已经有具备开发简单Android App的能力了 若是零基础 那么阅读本文可能有些难懂 我只能尽量简单解释 本文所用开
  • jetpack之ViewModel

    ViewModel类旨在以注重生命周期的方式存储和管理界面相关的数据 ViewModel类让数据可在发生屏幕旋转等配置更改后继续留存 摘自官方文档 Android 框架可以管理界面控制器 xff08 如 Activity 和 Fragmen
  • Jetpack-Compose-自定义绘制

    上节课我们简单的利用了一下自定义裁剪和自定义就能玩出如下简单案例 效果不错 这节课咋们来看看Compose自定义绘制能不能花里胡哨 一 Compose自定义 自定义 一个应用的可创造性往往离不开人们的千奇百怪想象和用户变化万千的需求 自定义
  • Jetpack Compose 从入门到入门(三)

    本篇开始介绍Jetpack Compose 中的修饰符Modifier 修饰符可以用来执行以下操作 xff1a 更改可组合项的大小 布局 行为和外观 添加信息 xff0c 如无障碍标签 处理用户输入 添加高级互动 xff0c 如使元素可点击
  • Jetpack Compose 从入门到入门(六)

    本篇说说Compose中的Canvas 1 Canvas span class token annotation builtin 64 Composable span span class token keyword fun span sp
  • NVIDIA Jetson TX2 Jetpack 4.5.1 刷机 要点总结

    参考 xff1a Jetson TX2刷机Jetpack4 2 亲测成功版 linkJetson tx2 使用 jetpack 4 3刷机全过程link 注意 连接 TX2 和 host 电脑 usb c 线一定是信号线 xff0c 用信号
  • Jetpack Compose 不止是一个UI框架~

    Jetpack Compose是用于构建原生Android UI的现代工具包 Jetpack Compose使用更少的代码 xff0c 强大的工具和直观的Kotlin API xff0c 简化并加速了Android上的UI开发 这是Andr
  • Jetson查看JetPack版本(tool)

    Jetson查看JetPack版本 查看L4T版本 我的L4T版本为 32 5 1 在官网查找对应的jetpack版本 This page includes access to previously released versions of
  • TX2安装jetpack

    目前官网支持的下载为JetPack L4T 3 2 1 linux x64 b23和JetPack L4T 3 3 linux x64 b39 首先使用具有Ubuntu16 04的host主机 xff08 我使用的是个人笔记本 xff0c
  • Jetpack练手(03):DataBinding

    文章目录 一 导入依赖二 搭建布局三 创建 ViewModel 数据对象四 修改布局为 DataBinding 布局五 绑定数据六 Demo 效果 一 导入依赖 新建 DataBindingDemo 工程 xff0c 参照 LiveData
  • Jetson tx2(JetPack 4.4)配置pytorch环境

    下载pytorch 下载pytorch1 7 xff1a 我的系统是JetPack4 4 xff0c 要求pytorch gt 61 1 7 安装pytorch span class token function sudo span spa
  • jetpack Compose 学习笔记

    目录 Modifier clickable 取消点击水波纹 LazyColum 相关 Modifier clickable 取消点击水波纹 modifier Modifier clickable onClick indication nul
  • 不贴代码能说明白Jetpack LiveData原理吗(一)

    LifecycleOwner如何提供周期生命周期的变化 LifecycleObserver如何得知生命周期的变化 LiveData的背后隐藏了多少不为人知的秘密 这一切都要从观察者模式说起 起源 何为观察者模式 在代码中最直接的表现就是在事
  • Jetpack学习之Room

    Android采用sqlite作为数据库存储 Room就是Google推出的自己的ORM Object Relational Mapping Room的架构图 Entity 一个Entity对应于数据库中的一张表 Entity类是Sqlit
  • Android Jetpack新成员Compose尝鲜

    前言 Compose的alpha版已经出来有段时间了 前不久的GDG上郭神介绍了Hilt 没曾想居然没有Compose和4 2版本的studio介绍 Compose是google今年在jetpack里新增的一位成员 想着能越过传统的xml
  • Jetpack学习之Lifecycle

    Jetpack是Google为了解决Android架构问题而引入的 Google官方说的说法 Jetpack是一套库 工具和指南 可以帮助开发者更轻松地编写应用程序 Jetpack中的组件可以帮助开发者遵循最佳做法 摆脱编写样板代码的工作并
  • Jetpack-Compose之一基础使用

    一 命令式UI和申明式UI 如果之前有了解或者使用果Flutter 应该会对命令式UI这种架构不陌生 目前申明式UI确实是很火包含Flutter SwiftUI JetpackCompose都使用了该种方式 2021年7月底 Google
  • Android Jetpack 之 DataStore

    1 概述 Google 推出了 JetPack 的新成员 DataStore DataStore 是一种新的数据存储方案 DataStore 以异步 一致的事务方式存储数据 克服了 SharedPreferences 的一些缺点 Jetpa

随机推荐

  • linux-快捷键

    linux快捷键 ctrl a 移动到行首 ctrl e 移动到行尾 ctrl u 删除光标之前的字符 ctrl k 删除光标之后的字符 ctrl l 清空屏幕终端内容 同于clear
  • 使用cocotools对yolov5 6.1的检测结果进行评估(其他模型类似,只需要调整数据格式为coco的就行)

    介绍 本博客是讲如何使用yolov5对测试集进行检测 然后使用cocotools进行评估 增加COCOeval的每个类别ap显示 5 0版本模型看这个博客 代码 5 0版链接 6 1版链接 环境 pytorch只需要保证能跑起来yolov5
  • 基于FPGA的简易频率计(Verilog HDL)

    文章目录 1 设计要求 2 方案 3 单元电路设计 3 1 FPGA部分模块电路代码 3 1 1分频电路 3 1 2主控电路 3 1 3计数电路 3 1 4译码显示电路 3 1 5超量程指示电路 3 2外部电路设计 3 3顶层电路设计图 4
  • Python关于import的实验(6) 在子包中的模块的import语句作为子程序被调用并且也可以作为主程序独立执行,则必须要使用绝对导入

    Note that relative imports are based on the name of the current module Since the name of the main module is always main
  • Iceberg 学习笔记

    本博客对应于 B 站尚硅谷教学视频 尚硅谷数据湖Iceberg实战教程 尚硅谷 Apache Iceberg官方联合推出 为视频对应笔记的相关整理 1 Iceberg简介 1 1 概述 为了解决数据存储和计算引擎之间的适配的问题 Netfl
  • stm32:error: #268: declaration may not appear after executable statement in block

    今天写中断函数时报错 error 268 declaration may not appear after executable statement in block 谷歌翻译直译过来就是 声明可能不会出现在块中的可执行语句之后 其实语句没
  • 内存、ram、sram、dram、rom、eprom、epprom、flash、norflash、nandflash 的比较

    1 内存 什么是内存呢 在计算机的组成结构中 有一个很重要的部分 就是存储器 存储器是用来存储程序和数据的部件 对于计算机来说 有了存储器 才有记忆功能 才能保证正常工作 存储器的种类很多 按其用途可分为主存储器和辅助存储器 主存储器又称内
  • 黄金票据制作-新手入门

    0x01 前言 相信准备学习内网渗透的人 都会知道有黄金票据这个事情 而黄金票据的原理是和攻击方式 网站说的都一大堆概念 很难懂 这里我说声明一下 黄金票据的作用在于做权限维持 原理在于域服务器上有一个krbtgt用户 0x02 黄金票据和
  • 2023Go面试问答_Go Runtime

    Goroutine 定义 Goroutine 是一个与其他 goroutines 并行运行在同一地址空间的 Go 函数或方法 一个运行的程序由一个或更多个 goroutine 组成 它与线程 协程 进程等不同 它是一个 goroutine
  • 惯量比多少合适_惯量比

    电机的负载惯量估计方法 提供了一种电机的负载惯量估计方法 即便在电机的齿槽转矩较大或在负载机械系统中出现共振的时候 这种方法也能够 估计负载惯量 在加速反馈信号中检测振动 当检测到的振动等于或高于预定水平的时候 用系数 乘以估计惯量增益 其
  • 机器学习复习模拟题

    Q1 在回归模型中 下列哪一项在权衡欠拟合 under fitting 和过拟合 over fitting 中影响最大 A 多项式阶数 B 更新权重 w 时 使用的是矩阵求逆还是梯度下降 C 使用常数项 答案 A 解析 选择合适的多项式阶数
  • <刷题笔记>408计算机学科专业基础综合_操作系统_第一章_计算机系统概述_第一篇

    操作系统是一种系统软件 通用软件 普通大众都会使用的 如office 迅雷 专用软件 某些领域的专业人士使用的 如AutoCAD logic Pro 系统软件 计算机中负责管理 运行 控制和维护计算机系统资源的软件 如 操作系统 数据库管理
  • ORACLE updata是提示违反唯一约束条件

    如图所示 使用updata语句时提示违反唯一约束条件 语句如下 update table name set param1 xxx param2 xxx where param4 xxx 解决办法 一 能用Navicat for Oracle
  • wow.js

    一 页面在向下滚动的时候 有些元素会产生细小的动画效果 虽然动画比较小 但却能吸引你的注意 刚知道wow js这个插件 之前写的类似滚动时页面效果都是自己用jQuery写的 现在有了插件 开发更加快捷有效了 演示及下载地址 http www
  • PermissionX开源框架的使用

    背景 动态申请权限是一件特别繁琐的事情 涉及的权限一多 就让人头疼 Android提供给我们的运行时权限申请的API并不是很友好 比如我们需要动态申请打电话的功能 除了在roidManifest xml中声明权限之外 还要在执行拨打电话操作
  • 报错:Avoided redundant navigation to current location: “/login“.完美解决

    需求 登陆之后才能查看主页面 否则跳转至登录页 遇到的问题 一开始是打算直接在拦截器跳转路由的 发现会报错Avoided redundant navigation to current location login 后来灵机一动 用了全局路
  • vue报错:regeneratorRuntime is not defined

    报错原因是使用了 async await 没有配置 babel 导致语法不支持 所以才会报错 首先安装以下依赖 npm install babel plugin transform runtime save dev 或 npm i save
  • 【AnyQ】如何添加插件

    一 已有插件 字典插件 此类插件继承DictInterface接口 哈希词典 HashAdapter
  • SyntaxWarning: name 'x' is assigned to before global declaration global color Python

    SyntaxWarning name x is assigned to before global declaration global color Python 这种报错很大原因是在同一个函数重复使用了global 声明 举个例子 x 0
  • LiveData详细分析2

    一 LiveData是什么东西 1 基于观察者设计模式 LiveData是一种持有可被观察数据的类 被观察者 LiveData需要一个观察者对象 一般是Observer类的具体实现 当观察者的生命周期处于STARTED或RESUMED状态时