文章目录

  • 基本使用
  • 规范使用
  • map 和 switchMap

基本使用

LiveData是Jetpack 提供的一种响应式编程组件,它可以包括任何类型的数据,并在数据发生变化的时候通知给观察者。LiveData 特别适合于ViewModel 结合在一起使用,虽然它也可以单独用在别的地方,但是绝大多数情况下,它是使用在ViewModel 当中的。

之前我们编写的那个计数器虽然功能非常简单,但其实是存在问题的。目前的逻辑是,当每次点击 ”Plus One“ 按钮时,都会先给ViewModel 中的计数加1,然后立即获取最新的计数。这种方式在单线程模式下确实可以正常工作,但如果 ViewModel 的内部开启了线程去执行一些耗时逻辑,那么在点击按钮后就立即去获取最新的数据,得到的肯定还是之前的数据(因为线程内部的耗时操作没有结束)。

你会发现,原来我们一直使用的都是在 Activity 中手动获取ViewModel中的数据这种交互方式,但是ViewModel 却无法将数据的变化主动通知给Activity。

或许你会说,我把 Activity 的实例传给 ViewModel ,这样ViewModel 不就能主动对Activity 进行通知了吗?注

LiveData 的基本使用相关推荐

  1. 浅谈 LiveData 的通知机制

    LiveData 和 ViewModel 是 Google 官方的 MVVM 架构的一个组成部分.巧了,昨天分析了一个问题是 ViewModel 的生命周期导致的.今天又遇到了一个问题是 LiveDa ...

  2. LiveData + ViewModel + Room (Google 官文)+Demo

    原文地址:lovestack.github.io/2017/11/13/- demo:github.com/lovestack/V- 本指南适用于那些过去构建应用程序有基础知识,现在想知道构建强大的生 ...

  3. LiveData使用和生命感知原理

    你知道LiveData是如何做到感知生命周期的吗? 前言 使用LiveData有以下优势 数据及时刷新:无论前台任务还是后台任务,只要当前页面处于活跃状态,就能马上刷新数据 不会因 Activity ...

  4. Android Jetpack LiveData 源码解析

    是什么 LiveData 是具备生命周期的数据,当数据放生变化的时候,如果页面已经销毁,那么就不会回调给监听者. 有什么用? 当我们获取到网络请求的数据,如果页面已经销毁了,就不会调用更新Ui 的方法 ...

  5. android DataBind LiveData ViewModel 使用详解

    1.导入android x ,升级 版本到28 implementation 'androidx.appcompat:appcompat:1.0.0'def room_version = " ...

  6. Activity销毁重建导致LiveData数据倒灌

    问题前因 我们做的是一个类似ofo的App,面向海外市场,有些国家存在多种语言,例如加拿大. 用户骑行完毕后,在HomeActivity请求结束行程的接口,HomeActivity中注册结束行程的Li ...

  7. Android Jetpack组件之 LiveData使用-源码

    1.前言 最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发中的问题,对代码的逻辑和UI界面实现深层解耦,打造数据驱动型UI界面. A ...

  8. LiveData ViewModel 使用详解

    什么是 LiveData LiveData 是一个可观测的数据持有类,但是不同于通常的被观察者,LiveData 具有生命周期感知能力.通俗点说,LiveData 就是具有 "Live&qu ...

  9. LiveData原理分析

    文章目录 简述 LiveData原理 1.订阅.绑定 2.setValue发送消息 3.总结 简述 LiveData是一个可被观察的数据容器类,它将数据包装起来,使数据成为被观察者.当数据发生改变时, ...

  10. Android架构组件LiveData+ViewModel

    前言 最近项目中有用到LiveData+ViewModel的架构组件,今天来学习一波.本篇文章参考:MVVM 架构,ViewModel和LiveData 所有语言为Kotlin. LiveData L ...

最新文章

  1. python3 信号量和线程池 semaphore ThreadPollExector
  2. 【Linux 内核】Linux 内核特性 ( 组织形式 | 进程调度 | 内核线程 | 多平台虚拟内存管理 | 虚拟文件系统 | 内核模块机制 | 定制系统调用 | 网络模块架构 )
  3. 2层框架结构柱子间距_2分钟掌握五种不同类型的厂房结构,找厂房少绕弯!
  4. 外国人无知嘲笑,中国人的回答让他们目瞪口呆!
  5. Function Two
  6. 4 命令_主梁建成、拾掇命令流(2019/4/10)
  7. 我所不知道的Web 前台设计
  8. Codeforces Round #246 (Div. 2) D. Prefixes and Suffixes kmp + dp
  9. java做h5小游戏服务端_神藏西游H5游戏源码服务端+客户端+搭建教程
  10. SaltStack 介绍和安装
  11. java打包-exe文件-最终以setup形式发布的解决之道
  12. python信号端点检测_语音端点检测(Voice Activity Detection,VAD)
  13. python的sqlite3说明_python之sqlite3使用详解
  14. linux系统处理excel,Apache POI处理Excel文档
  15. springboot 发送邮件问题(阿里云企业邮箱)
  16. Js获取上传文件的绝对路径时总是的到C:\fakepath\+文件名称 解决方案
  17. Regression 回归
  18. 2023团体程序设计天梯赛--正式赛
  19. 【Framework】透视Android中的Handler
  20. Win10电脑创建本地网站

热门文章

  1. win无线网卡怎么进入监听模式_网卡灯正常,但却不能连入网络该如何解决?
  2. android手机怎么上卡,安卓手机卡慢怎么办 安卓手机卡慢解决方案【详解】
  3. Failed to introspect Class
  4. AI 人工智能学习路线
  5. webpack学习之路------配置多个 HTML 文件
  6. tp路由服务器无响应,路由器无法PPPOE链接上网老显示服务器无响应
  7. ADO简介(未完成)
  8. [Python]根据ip地址计算子网掩码位数
  9. 成都榆熙:拼多多商家都想要提高客单价,但是怎么去提高呢?
  10. ASUS R556L华硕老笔记升级,换固态硬盘,鸟枪换炮记:买固态硬盘的纠结和艰辛的系统迁移(前后花了三天时间)