LiveData 是可感知生命周期的可观察对象,它被用来赋予 UI 动态、安全以及高效更新的能力。LiveData 也可以在视图和 ViewModel 双向通信范围之外工作,甚至连 Room 等其他组件也支持 LiveData。但是,滥用 LiveData 也会带来风险,尤其是在涉及多线程的时候。解决方法: 我们并没有扩展 LiveData 的功能,而让它可以无缝和 Kotlin 协程整合工作。
可观察性指的是一个对象会在其数据发生变更时向其他类发出通知。可观察性是数据绑定库 (Data Binding) 的重要特性之一,它可以将数据和 UI 元素绑定在一起——当数据发生变化时,屏幕上的相关元素也会随之更新。
在今年(2021 年)的 Google I/O 大会中的 Jetpack Q&A 环节,Android 团队被问了一个很有意思的问题:LiveData 是要被废弃了吗?
Android Jetpack 是一系列助力您更容易打造优秀 Android 应用的工具和组件。这些组件能帮助您遵循最佳实践、免除编写繁复的样板代码并简化复杂任务,从而使您可以专注于最核心的代码逻辑。
生命周期管理库 (Lifecycles) 由三个组件构成,包括 Lifecycle、LiveData 和 ViewModel。它可以用来解决常见的生命周期问题,同时使您的应用程序易于测试且可维护。 ViewModel 用于提供和管理 UI 界面的数据。通过使用 ViewModel,开发者可以方便的将 UI 界面和数据逻辑剥离开来,从而达到 UI 界面 Activity 和 Fragment 负责显示数据和处理用户操作;ViewModel 则负责提供和管理 UI 界面的数据,并且负责和数据层通讯的效果。与此
Android Architecture Components 是一组库,可帮助您设计健壮、可测试和可维护的应用程序。包含以下几个组件模块:
这个类的位置在 lifecycle-viewmodel-savedstate的SavedStateHandle类中,也是继承自MutableLiveData,其与MutableLiveData最大的不同是多了两个属性。
根据我们曾经做的调查,开发者们希望 Android 官方可以维护一些实用的组件库和架构实践,以降低中大型应用的开发门槛,这样开发团队就可以集中更多精力在实际业务的优化和改进上。
从 API 1 开始,处理 Activity 的生命周期 (lifecycle) 就是个老大难的问题,基本上开发者们都看过这两张生命周期流程图:
Lifecycle 是属于 Android Architecture Components 的一个组件, 而Android Architecture Components是属于Android Jetpack的一部分, 可以让组件自己管理生命周期的逻辑,避免每次调用时的繁琐步骤,用Lifecycle实现的组件可以实现生命周期的监听,数据变化的监听等功能。
点此查看真人版中文介绍视频:v.qq.com/x/page/r050… 几十亿的设备都在用 Android 系统,从高端手机到飞机上的影音娱乐系统,应有尽有,不一而足。而 Android OS 则为这几十亿的设备保驾护航,高效管理资源,保障运行流畅,然而有时候却增加了开发卓越 App 的难度。为了简化开发流程,我们在 Google I/O 大会上发布了架构组件(Architecture Components)的预览版,为 App 开发构架提供指南,并为常见任务,如生命周期管理、数据持久性等提供了一系列库。有
知识储备:需要对Lifcycle、LiveData、ViewModel、DataBinding有基本了解
主要思想就是用到了观察者模式思想,让观察者和被观察者解耦,同时还能感知到数据的变化,所以一般被用到ViewModel中,ViewModel负责触发数据的更新,更新会通知到LiveData,然后LiveData再通知活跃状态的观察者。
前半部分介绍响应式编程的一些思想,后半部分介绍我们如何基于LiveData实现数据流设计的落地实践。 "一切都是对象 ( Everything is an Object! )" 当使用面向对象(Object-Oriented)的思维去开发时,我们被教导:“一切都是对象 ( Everything is an Object! )”。 我们自顶向下地分解问题,将模块封装为交互(method) 和状态(property)的集合,通过不断将模块拆分成更细的维度,最后形成一个个具有明确定义的内聚性的类(Class)
Android开发发展到今天已经相当成熟了,各种架构大家也都耳熟能详,如MVC,MVP,MVVM等,其中MVVM更是被官方推荐,成为Android开发中的显学。
关于Activity/Fragment其最重要的概念就是生命周期管理,我们开发者需要在不同生命周期回调中做不同事情。比如onCreate做一些初始化操作,onResume做一些恢复操作等等等等,以上这些操作都比较单一直接去写也没有多大问题。
ViewModel 甫一发布,便成为了 Jetpack 中的核心组件之一。我们在 2019 年做的一份开发者问卷显示,超过 40% 的 Android 开发者已经在自己的应用中使用了 ViewModel。ViewModel 可以将数据层与 UI 分离,而这种架构不仅可以简化 UI 的生命周期的控制,也能让代码获得更好的可测试性。如果想了解更多,可以参考 ViewModel: 简单介绍视频和官方文档。
以前项目中虽然也使用MVVM架构,但由于整体框架不是我自己搭建的,导致我对于MVVM架构的整体还是很不熟悉,所以这次就自己搭建并实现一次MVVM架构。
上篇文章我给大家分享了我对Android架构的理解,从思想层面去讲述架构的演进过程。很多小伙伴读完后拍手叫好,表示还想听我讲一下对Jetpack 架构的看法 ,本着帮人帮到底的精神,今天我将再次动笔 尽量从本质上讲清楚Jetpack 架构存在的意义,以及解决的问题。
在 Kotlin 中使用 Android 的 Java API 时,您会迅速意识到这样的做法失去了 Kotlin 语言简单有趣的特点。与其您亲自去编写这些 API 的 wrapper 和扩展函数,不如了解一下 Jetpack KTX 库。目前为止,已有超过 20 个库拥有对应的 KTX 版本,这些 KTX 库实现了常用的 Java 版本 API 的功能,包括 Android 平台 API、ViewModels、SQLite,甚至还有 Play Core。本文会介绍目前可用的 KTX API 并深入其中去分析它们是如何实现的。
WorkManager能帮我们更好的管理后台任务,可以更好地管理执行时机、执行顺序和执行状态(有无网络、是否在充电)。他会根据系统版本选择合适的方案执行任务,比如在API 23及以上使用JobScheduler,以下则使用BroadcastReceiver和AlarmManager,能兼容到API 14。同时,他会将任务存储进数据库来保证关机重启后任务仍可执行(这点有待验证,因为国内机型太多了)。
Plaid 是格子图案的意思,也是一款在 2015 年开源的 Material Design 样例应用。它通过 API 调用聚合了 Dribbble、Designer News 和 Product Hunt 三个网站的内容数据,并通过丰富的 UI 交互体验呈现给用户。
ViewModel 甫一发布,便成为了 Jetpack 中的核心组件之一。我们在 2019 年做的一份开发者问卷显示,超过 40% 的 Android 开发者已经在自己的应用中使用了 ViewModel。ViewModel 可以将数据层与 UI 分离,而这种架构不仅可以简化 UI 的生命周期的控制,也能让代码获得更好的可测试性。
在Android开发中,LiveData是一个非常有用的工具。它可以帮助我们在应用程序中实现响应式编程,并且还具有生命周期感知能力,可以帮助我们避免内存泄漏。本文将探讨LiveData的高阶使用和原理,并提供一些常见错误的解决方法。此外,我们还将介绍一些更高级的使用场景,以帮助你更好地使用LiveData。
Jetpack 是 Android 组件的集合,使您可以更轻松地开发出色的 Android 应用。这些组件可帮助您遵循最佳实践、减少编写样板代码的工作并简化复杂任务,以便您将精力集中放在开发您应用的核心逻辑。
从LiveData具有的特点,我们就能联想到它能够解决我们遇到的什么问题。LiveData具有以下优点:
LiveData是Jetpack架构组件Lifecycle 库的一部分,是一个可感知生命周期的可观察容器类 (Observable)。与常规的可观察类不同,LiveData 具有生命周期感知能力,这意味着它具有感知应用组件(如 Activity、Fragment 或 Service)的生命周期的能力,并且LiveData仅更新处于活跃生命周期状态的应用组件观察者。
LiveData 是Jetpack中的一个组件,是一个可被观察的数据存储器类, 具有感知组件生命周期的能力,LiveData 可以感知组件生命周期活跃状态发送数据更新,在组件销毁时移除观察者对象,大多结合具有生命周期的组件一起使用(如 Activity、Fragment 或 Service,或实现了 LifecycleOwner 接口的对象)。
ViewModel 以注重生命周期的方式存储和管理界面相关的数据,当数据发生变化时,可通过接口的方式通知页面,但是有很多数据要通知时,需要定义大量的接口显得十分冗余,为此,Jetpack提供了LiveData组件解决这种问题,简化了开发过程。 LiveData 是一种可观察的数据存储器类。它是一个数据的容器,将数据包装起来,使数据成为被观察者,当数据发生变化时,观察者能够获得通知。 LiveData 具有生命周期感知能力,它遵循其他应用组件(如 Activity、Fragment 或 Service)的生命周期。这种感知能力确保 LiveData 仅更新处于活跃生命周期状态的应用组件观察者。
借助 LiveData 的能力,在 View(Activity 或者 Fragment)和 ViewModel 之间,使用 LiveData 通信,当 LiveData 发生变化的时候,订阅了该 LiveData 的 View 能够收到通知以便做出相应的更新 UI 逻辑。
关于LiveData,在2022尾声的今天,从事 Android 开发的小伙伴一定不会陌生。相应的,关于 LiveData 解析与使用的文章更是数不胜数,其中不乏优秀的创作者,在众多的文章以及前辈面前,本篇也不敢妄谈能写的多么深入,易懂。
在之前我们深入研究了 Lifecycle 的实现原理,并在文末提到了LiveData 以及 ViewModel,这次我们来讲讲 LiveData。
这个系列我做了协程和Flow开发者的一系列文章的翻译,旨在了解当前协程、Flow、LiveData这样设计的原因,从设计者的角度,发现他们的问题,以及如何解决这些问题,pls enjoy it。
LiveData 是基于 Lifecycle 框架实现的生命周期感知型数据容器,能够让数据观察者更加安全地应对宿主(Activity / Fragment 等)生命周期变化,核心概括为 2 点:
ViewModel 是 Jetpack 组件中较常用的组件之一,也是实现 MVVM 模式或 MVI 模式的标准组件之一。在这篇文章里,我将与你讨论 ViewModel 实用和面试常见的知识点。如果能帮上忙请务必点赞加关注,这对我非常重要。
CameraX 是一个 Jetpack 支持库,旨在帮助您简化相机应用的开发工作。它提供一致且易于使用的 API 界面,适用于大多数 Android 设备,并可向后兼容至 Android 5.0 (API 级别 21)。
LiveData 默认是支持粘性消息的(关于什么是粘性消息,请移步我的另一篇文章:LiveData 的正确使用姿势以及反模式 ),如何通过 LiveData 来实现非粘性消息呢,本文将在官博的基础上,分析几种尝试的方案,以及他们各自的优缺点
postValue(this);这个方法是用于触发回调数据更新的方法. 你可以在你需要被观察的数据里添加.
三个步骤就定义了使用LiveData的方式,从步骤可以看出,使用了观察者模式,当LiveData对象持有数据发生变化,会通知对它订阅的所有处于活跃状态的订阅者。而这些订阅者通常是UI控制器,如Activity或Fragment,以能在被通知时,自动去更新Views。
Livedata 是 Google 推荐的 Android 架构组件之一,是一个存放可被观察的数据持有类,有生命周期感知功能,解决了android开发者需要去手动处理生命周期的痛点。 比如当我们使用 Retrofit+Rxjava处理接口回调数据时,需要考虑activity 或 fragment 生命周期,以解决 onStop 或 onDestory之后回调数据的问题。现在只需要 Retrofit+Livedata 就好,其他的 Livedata 帮你做了。
LiveData 是一种持有可被观察的数据存储类,和其他可被观察的类不同的是,LiveData 是就要生命周期感知能力的,这意味着他可以在 Activity ,fragment 或者 service 生命周期活跃状态时 更新这些组件。
LiveData 是一个可观察数据包装类,与普通观察者不同,LiveData 具备生命周期感知能力,这意味着它遵循其它应用组件的生命周期(Activity、Fragment、Service 等),此感知能力确保了 LiveData 只更新处于生命周期活跃状态的组件的观察者
与普通可观察类不同的是LiveData具有生命周期感应能力,比如我们在页面中进行网络请求结束后,需要将数据显示在UI上,如果此时页面被销毁就会有空指针等异常,我们还需要在页面销毁的时候单独处理,而使用了LiveData之后就不需要我们手动的去处理这些了。
LiveData是一个与Activity/Fragment生命周期相关(lifecycle-aware)的Observer类。而这种相关性(awareness )会导致LiveData中的数据只有在Active状态下才会被回调。
2. Jetpack源码解析—Navigation为什么切换Fragment会重绘?
也就是说,LiveData使得 数据的更新 能以观察者模式 被observer感知,且此感知只发生在 LifecycleOwner的活跃生命周期状态。
领取专属 10元无门槛券
手把手带您无忧上云