LiveData 的基本使用
文章目录
- 基本使用
- 规范使用
- map 和 switchMap
基本使用
LiveData
是Jetpack 提供的一种响应式编程组件,它可以包括任何类型的数据,并在数据发生变化的时候通知给观察者。LiveData
特别适合于ViewModel
结合在一起使用,虽然它也可以单独用在别的地方,但是绝大多数情况下,它是使用在ViewModel
当中的。
之前我们编写的那个计数器虽然功能非常简单,但其实是存在问题的。目前的逻辑是,当每次点击 ”Plus One“ 按钮时,都会先给ViewModel
中的计数加1,然后立即获取最新的计数。这种方式在单线程模式下确实可以正常工作,但如果 ViewModel
的内部开启了线程去执行一些耗时逻辑,那么在点击按钮后就立即去获取最新的数据,得到的肯定还是之前的数据(因为线程内部的耗时操作没有结束)。
你会发现,原来我们一直使用的都是在 Activity 中手动获取ViewModel
中的数据这种交互方式,但是ViewModel
却无法将数据的变化主动通知给Activity。
或许你会说,我把 Activity 的实例传给 ViewModel
,这样ViewModel
不就能主动对Activity 进行通知了吗?注
LiveData 的基本使用相关推荐
- 浅谈 LiveData 的通知机制
LiveData 和 ViewModel 是 Google 官方的 MVVM 架构的一个组成部分.巧了,昨天分析了一个问题是 ViewModel 的生命周期导致的.今天又遇到了一个问题是 LiveDa ...
- LiveData + ViewModel + Room (Google 官文)+Demo
原文地址:lovestack.github.io/2017/11/13/- demo:github.com/lovestack/V- 本指南适用于那些过去构建应用程序有基础知识,现在想知道构建强大的生 ...
- LiveData使用和生命感知原理
你知道LiveData是如何做到感知生命周期的吗? 前言 使用LiveData有以下优势 数据及时刷新:无论前台任务还是后台任务,只要当前页面处于活跃状态,就能马上刷新数据 不会因 Activity ...
- Android Jetpack LiveData 源码解析
是什么 LiveData 是具备生命周期的数据,当数据放生变化的时候,如果页面已经销毁,那么就不会回调给监听者. 有什么用? 当我们获取到网络请求的数据,如果页面已经销毁了,就不会调用更新Ui 的方法 ...
- android DataBind LiveData ViewModel 使用详解
1.导入android x ,升级 版本到28 implementation 'androidx.appcompat:appcompat:1.0.0'def room_version = " ...
- Activity销毁重建导致LiveData数据倒灌
问题前因 我们做的是一个类似ofo的App,面向海外市场,有些国家存在多种语言,例如加拿大. 用户骑行完毕后,在HomeActivity请求结束行程的接口,HomeActivity中注册结束行程的Li ...
- Android Jetpack组件之 LiveData使用-源码
1.前言 最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发中的问题,对代码的逻辑和UI界面实现深层解耦,打造数据驱动型UI界面. A ...
- LiveData ViewModel 使用详解
什么是 LiveData LiveData 是一个可观测的数据持有类,但是不同于通常的被观察者,LiveData 具有生命周期感知能力.通俗点说,LiveData 就是具有 "Live&qu ...
- LiveData原理分析
文章目录 简述 LiveData原理 1.订阅.绑定 2.setValue发送消息 3.总结 简述 LiveData是一个可被观察的数据容器类,它将数据包装起来,使数据成为被观察者.当数据发生改变时, ...
- Android架构组件LiveData+ViewModel
前言 最近项目中有用到LiveData+ViewModel的架构组件,今天来学习一波.本篇文章参考:MVVM 架构,ViewModel和LiveData 所有语言为Kotlin. LiveData L ...
最新文章
- python3 信号量和线程池 semaphore ThreadPollExector
- 【Linux 内核】Linux 内核特性 ( 组织形式 | 进程调度 | 内核线程 | 多平台虚拟内存管理 | 虚拟文件系统 | 内核模块机制 | 定制系统调用 | 网络模块架构 )
- 2层框架结构柱子间距_2分钟掌握五种不同类型的厂房结构,找厂房少绕弯!
- 外国人无知嘲笑,中国人的回答让他们目瞪口呆!
- Function Two
- 4 命令_主梁建成、拾掇命令流(2019/4/10)
- 我所不知道的Web 前台设计
- Codeforces Round #246 (Div. 2) D. Prefixes and Suffixes kmp + dp
- java做h5小游戏服务端_神藏西游H5游戏源码服务端+客户端+搭建教程
- SaltStack 介绍和安装
- java打包-exe文件-最终以setup形式发布的解决之道
- python信号端点检测_语音端点检测(Voice Activity Detection,VAD)
- python的sqlite3说明_python之sqlite3使用详解
- linux系统处理excel,Apache POI处理Excel文档
- springboot 发送邮件问题(阿里云企业邮箱)
- Js获取上传文件的绝对路径时总是的到C:\fakepath\+文件名称 解决方案
- Regression 回归
- 2023团体程序设计天梯赛--正式赛
- 【Framework】透视Android中的Handler
- Win10电脑创建本地网站
热门文章
- win无线网卡怎么进入监听模式_网卡灯正常,但却不能连入网络该如何解决?
- android手机怎么上卡,安卓手机卡慢怎么办 安卓手机卡慢解决方案【详解】
- Failed to introspect Class
- AI 人工智能学习路线
- webpack学习之路------配置多个 HTML 文件
- tp路由服务器无响应,路由器无法PPPOE链接上网老显示服务器无响应
- ADO简介(未完成)
- [Python]根据ip地址计算子网掩码位数
- 成都榆熙:拼多多商家都想要提高客单价,但是怎么去提高呢?
- ASUS R556L华硕老笔记升级,换固态硬盘,鸟枪换炮记:买固态硬盘的纠结和艰辛的系统迁移(前后花了三天时间)