AndroidJetpack Livedata最详尽的使用场景分析_globlelivedata-程序员宅基地

技术标签: 字节跳动  腾讯  livedata  java  android  jetpack  移动开发  阿里  

Livedata 概览

LiveData 是一种可观察的数据存储器类。与常规的可观察类不同,LiveData 具有生命周期感知能力

如果观察者(由 Observer 类表示)的生命周期处于 STARTED 或 RESUMED 状态,则 LiveData 会认为该观察者处于活跃状态。。LiveData 只会将更新通知给活跃的观察者。为观察 LiveData 对象而注册的非活跃观察者不会收到更改通知。

您可以注册与实现 LifecycleOwner 接口的对象配对的观察者。有了这种关系,当相应的 Lifecycle 对象的状态变为 DESTROYED 时,便可移除此观察者。这对于 Activity 和 Fragment 特别有用,因为它们可以放心地观察 LiveData 对象,而不必担心泄露

LiveData 优势

  1. 数据符合页面状态
  2. 不会发生内存泄露
  3. 不会因 activity 停止而导致崩溃
  4. 不再需要手动处理生命周期
  5. 数据始终保持最新状态
  6. 可以用来做资源共享

Livedata 使用

一般来说我们会在 ViewModel 中创建 Livedata 对象,然后再 Activity/Fragment 的 onCreate 中注册 Livedata 监听(因为在 onStart 和 onResume 中进行监听可能会有冗余调用)

Livedata 简单使用

仍然还是用我们倒计时的例子,在 Viewmodel 中开始一个 2000s 的倒计时,然后通过 Livedata 回调给 Activity 进行更新界面,代码:

  1. viewmodel 代码
class CountDownModel : ViewModel() {

    val countDownLivedata = MutableLiveData<String>()
    private var remainSecond = 2000//剩余秒数

    init {
        val countDown = object : CountDownTimer(2000 * 1000, 1000) {
            override fun onTick(millisUntilFinished: Long) {
                remainSecond--
                countDownLivedata.postValue("剩余:${remainSecond} 秒")
            }

            override fun onFinish() {
                countDownLivedata.postValue("倒计时结束")
            }
        }
        countDown.start()
    }
}
复制代码
  1. activity 中观察数据更新 ui 代码
 val countDownModel: CountDownModel by viewModels<CountDownModel> {
        ViewModelProvider.NewInstanceFactory()
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_count_down)
        countDownModel.countDownLivedata.observe(this, object : Observer<String> {
            override fun onChanged(value: String?) {
                value?.let {
                    tv_countdown_remainsecond.text = it
                }
            }
        })
    }
复制代码
  1. 效果图

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43901866/article/details/118100584

智能推荐

SpringMVC+redis整合-程序员宅基地

文章浏览阅读834次。在网络上有一个很多人转载的springmvc+redis整合的案例,不过一直不完整,也是被各种人装来转去,现在基本将该框架搭建起来。package com.pudp.bae.base; import java.io.Serializable; public abstract class BaseModel implements Serializable{ }pa

如何系统地学习网络安全_网络安全 学习-程序员宅基地

文章浏览阅读1.5w次,点赞32次,收藏293次。这篇博客只在于保存一些对于博主自己想保存下来的东西,摘自知乎王音和余弦两位大佬对于学习网络安全的一些看法(源地址见文末),如果对正在阅读的你有帮助,不盛荣幸。下面来自 王音成为伟大黑客的关键在于做自己喜爱的事,要把一件事情做好,你必须热爱它。所以只要你能坚持对安全技术的热爱,到了这种程度,你就会做得更好。系统性的学习技术的东西其实很容易学,操作系统、网络、数据库等无非..._网络安全 学习

美国大学计算机科学专业研究生排名,美国大学计算机科学专业研究生排名介绍...-程序员宅基地

文章浏览阅读240次。美国大学计算机科学专业研究生排名1University Of California Berkeley加州大学伯克利分校5Cornell University康乃尔大学5University of Illinois Urbana Champaign伊利诺伊大学厄本那―香槟分校7University of Washington华盛顿大学8Princeton University普林斯顿大学8The U..._2024年芝加哥大学计算机科学硕士排名

Oracle ORA-01110错误解决方法-程序员宅基地

文章浏览阅读1.1k次。在数据库服务器上,建立了一个用户test,然后使用命令drop user test cascade删除了用户,接着也删除了这个用户的数据文件/opt/oracle/oradata/test/testdata.dbf。当在登录数据库时,能够启动实例,但是打不开数据库,系统报错: ORA-01157: cannot identify/lock data file 10 - see DB..._ora-01101

普通二本院校计算机专业大学心得_普通二本能学计算机吗-程序员宅基地

文章浏览阅读5.2k次,点赞24次,收藏26次。前言​ 2019年9月2日,步入大四的第一天,这第一天有分感慨,却又不知道如何表达。马上就要步入社会了,身处普通二本院校(“吕梁学院”)计算机专业的我却对于前途未来并不担心,我这几年的努力,我自己知道。我这个人比较…比较执着,对!执着,更加形象。我想要的,都会通过自己的努力得到。而我现在想的,是想给学校留下点什么,想给下一个像我这样的人留下点什么。步入大学的迷茫​ 刚步入大学,没有..._普通二本能学计算机吗

三款性能测试工具kylinPET、LoadRunner、Jmeter在脚本录制与调试上的差异性_类似于loadrunner脚本录制软件-程序员宅基地

文章浏览阅读1w次,点赞6次,收藏52次。软件的性能测试活动离不开性能测试工具的支持。国外常用的性能测试工具有:loadRunner(商用),Jmeter(开源),国内做的比较好的国产性能工具有kylinPET。性能测试工具的录制和调试是能力的高低,是判断性能测试工具优劣重要指标。下面笔者通过实例来分析一下这三款知名本和调试上的差异点。测试工具选:Jmeter..._类似于loadrunner脚本录制软件

随便推点

C++ MFC控制台输出调试信息_控制台输出语句 mfc-程序员宅基地

文章浏览阅读3.3k次。C++ MFC控制台输出调试信息_控制台输出语句 mfc

es6新特性总结-程序员宅基地

文章浏览阅读144次。一.es6是什么?ES6, 全称 ECMAScript 6.0 ,是 JavaScript 的下一个版本标准,2015.06 发版。二.es6有什么用? ES6 的出现主要是为了解决 ES5 的先天不足,比如 JavaScript 里并没有类的概念 目前存在少数低版本浏览器的 JavaScript 是 ES5 版本,大多数的浏览器已经支持 ES6 ES6提供了大量的语法糖,让你写代码的时候简直不要太爽! 三.es6有哪些特性?1.let 与 constlet:用_es6新特性

OpenGL indirect material间接材料的实例-程序员宅基地

文章浏览阅读250次。OpenGL indirectmaterial先上图,再解答。完整主要的源代码源代码剖析先上图,再解答。完整主要的源代码源代码剖析_opengl indirect

关于Eclipse的SVN插件(Subclipse)历史版本乱码的问题-程序员宅基地

文章浏览阅读69次。我的项目都统一使用了UTF-8编码查看当前版本,还是提交到SVN服务器,或者Checkout出代码都是正常的,在Eclipse里面,或文本文件编辑器打开都可以看到正确的内容。但是在进行本地文件和SVN远程文件比较的时候,远程文件中所有的中文都是乱码,如下图所示:而通过 SVN 的界面直接打开远程文件,所显示的也是乱码。实在郁闷,这样即无法判别文件的差异。在网上查..._svn:e200019:“svn\u diff”中的版本不匹配(应为相等):找到1.14.1

MySQL学习笔记(EduFancy老师的课堂学习笔记)-程序员宅基地

文章浏览阅读123次。SQL学习笔记SQL SummarySQL的约束DLLDML1. select 选择(有返回值)2. insert 插入3. update 更新4. delete 删除SQL连接功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释..._edufancy

Cruise Control_cruise control安装和使用-程序员宅基地

文章浏览阅读1.8k次。Cruise Control 使用报告1. Cruise Control 介绍Cruise Control 是一种持续集成过程的框架,包括了邮件通知,ant 和各种源码控制工具的插件,并提供了 web 接口,用于查看当前和以前的创建的结果。 2. 下载安装在http://sourceforge.net/projects/cruisecontrol/fil_cruise control安装和使用

推荐文章

热门文章

相关标签