首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

“终于懂了“系列:Jetpack AAC完整解析(四)MVVM - Android架构探索!

点击上方胡飞洋可以关注哦~ 前面三篇介绍了Jetpack 架构组件中 最重要 的部分:生命周期组件-Lifecycle、感知生命周期的数据组件-LiveData、视图模型组件-ViewModel。...除此之外,引用也不能跨层持有,比如View层不能持有仓库层的引用,谨记每一层的组件都只能与它相邻层的组件进行交互。 这种设计打造了一致且愉快的用户体验。...根据上面的架构图,就是ViewModel了,所以我们创建 UserListViewModel 继承自 ViewModel,并且把 用户信息列表 以 LiveData呈现。...另外,注意到暴露的获取LiveData的方法 返回的是LiveData类型,即不可变的,而不是MutableLiveData,好处是避免数据在外部被更改。...3.2.2 获取数据 现在,我们已使用 LiveData 将 UserListViewModel 连接到UserListActivity,那么如何获取用户个人信息列表数据呢?

2.1K20

Android 原生 SQLite 数据库的一次封装实践

对于普通 APP 的开发确实完全不需要,这些框架中总有一款可以完全满足你日常需求;但如果你是一个SDK开发者,而且业务是一个比较依赖数据库操作的场景,如果限制不能依赖第三方SDK(主要考量维护性、问题排查...> entities = new ArrayList(); //add entities //同步方式 //rowId为最终的自增id(同原生insert操作返回值) //final int rowId...>返回值参数(泛型参数)还可以直接指定为Throwable,如果内部异常可以通过它返回,成功则为空 五、核心实现点 基本原理仍是借鉴了Retrofit框架的实现,通过动态代理拿到Method对象的各种参数进行...Method对象和参数列表args[],可以通过这两个参数拿到上述标识的所有元素,具体方法如下所示: 获取方法的注解: method.getAnnotations() 获取形参列表:已传过来 获取参数注解和类型...()一个方法,它返回数组的组成元素类型。

99510
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    由浅入深,详解 LiveData 的那些事

    map,从而将用户 observe() 传递进来的观察者保存起来; 为了符合Android的生命周期,保证页面活跃状态才能收到通知,从而避免非活跃观察者被通知到,节省性能;以及能不能将解绑逻辑让框架自行执行...而后者是作用于事件通知,即可以确保本次发出的事件一定会被可观察的接收者收到,虽然后者也支持 Sticky ,这点似乎和LiveData相似,但这两者在思想上本来就是大不相同。...而在2022的今天,Kotlin 在Android开发中的占有率早已经超过63%(这只是2021年统计),随着日益增加的业务与架构挑战,LiveData 显然不能满足更多需求,架构也需要更先进的组件支持...相应的,在 Android上 面,Flow 也可以通过 asLiveData() 从而转为LiveData,由此兼容使用。...当然需要注意的是,Flow 并不能感知 Android 的生命周期,你可能需要再增加一些模版代码,但好在Android团队做了各种扩展方法,这个成本在今天也是非常小。

    1.4K20

    今天撸一波Jetpack下的Lifecycle、ViewModel和LiveData

    2、Lifecycle 根据官方文档,Lifecycle是一个抽象类,一个有Android 生命周期的对象附在它上面, 并且它持该对象的当前生命周期所处状态,所以其他对象可以观察到这种状态并做出相应的反应...② removeObserver():可以调用此方法从Lifecycle的观察者列表中删除给定的观察者。从生命周期中删除观察者将不再接收任何触发事件。...如果LiveData的观察者列表中不存在活跃观察者了,也就是说没有一个观察者绑定的LifecycleOwner的Lifecycle处于 STARTED 或者RESUMED状态。...③ observeForever(Observer observer):用于将一个Observer添加到一个活跃列表中,该列表将始终保持ACTIVE状态,因此永远不会自动从Observer实例列表中移除它...4.2 ViewModel使用 ViewModel的创建不能通过简单的new对象来进行。需要通过activity / fragment 获取ViewModel实例。

    1.6K10

    “终于懂了“系列:Jetpack AAC完整解析(二)LiveData 完全掌握!

    例如,曾经在后台的 Activity 会在返回前台后,observer立即接收最新的数据。 二、LiveData的使用 下面介绍LiveData的使用,掌握使用方法也可以更好理解上面的内容。...2.3 高级用法 如果希望在将 LiveData 对象分派给观察者之前对存储在其中的值进行更改,或者需要根据另一个实例的值返回不同的 LiveData 实例,可以使用LiveData中提供的Transformations...Transformations.switchMap()就用于实现这一逻辑,返回值liveDataSwitchMap添加观察者就可以了。...然后对添加的结果进行判断,如果mObservers中已经存在此observer key,但value中的owner不是传进来的owner,就会报错“不能添加同一个observer却是不同LifecycleOwner...感谢与参考: Livedata官方文档 https://developer.android.com/topic/libraries/architecture/livedata?

    4K30

    Android  JetPack~ LiveData (一)   介绍与使用

    一般情况下LiveData都是搭配这ViewModel使用,这里先介绍一下LiveData,再结合ViewModel使用 Android数据绑定技术一,企业级开发 Android数据绑定技术二,企业级开发...Android  JetPack~ DataBinding(数据绑定)(一)    集成与使用 Android  JetPack~ LiveData (一)   介绍与使用 Android  JetPack...MutableLiveData包裹的有setValue,postValue方法 当然我们也可以让它不对外暴露setValue,postValue方法,返回值修改为LiveData public...setValue()   setValue()的特性如下:   1.此方法只能在主线程里调用 getValue()   返回当前值。 注意,在后台线程上调用此方法并不能保证将接收到最新的值。...其实如果这个数据的观察者在最前台就返回true,否则false。 hasObservers()   如果此LiveData具有观察者,则返回true。

    1.6K20

    是时候更新手里的武器了—Jetpack架构组件简析

    1)LiveData 具有生命周期感知能力,可以感知到Activity等的生命周期。这样有什么好处呢?...很常见的一点就是可以减少内存泄漏和崩溃情况了呀,想想以前你的项目中针对网络接口返回数据的时候都要判断当前界面是否销毁,现在LiveData就帮你解决了这个问题。 具体为什么能解决崩溃和泄漏问题呢?...不会因 Activity 停止而导致崩溃如果观察者的生命周期处于非活跃状态(如返回栈中的 Activity),则它不会接收任何 LiveData 事件。...” 所以Paging就是一个分页库,主要用于Recycleview列表展示。下面我就结合Room说说Paging的用法。...1)PagedList 用于加载应用数据块,绑定数据列表,设置数据页等。

    2.9K20

    Android 面试题:为什么 Activity 都重建了 ViewModel 还存在?—— Jetpack 系列(3)

    本文已收录到 GitHub · Android-NoteBook[1] 中。...---- 这篇文章是 Jetpack 系列文章第 3 篇,专栏文章列表: 一、架构组件: 1、Lifecycle:生命周期感知型组件的基础 2、LiveData:生命周期感知型数据容器 3、ViewModel...:数据驱动型界面控制器(本文)[2] 4、Flow:LiveData 的替代方案[3] 5、从 MVC 到 MVP、MVVM、MVI:Android UI 架构演进[4] 6、ViewBinding:新一代视图绑定方案...如果 ViewModel 是轻量级的或者可以保证数据层操作快速完成,这个泄漏影响不大可以忽略。但如果数据层操作并不能快速完成,或者 ViewModel 存储了重量级数据,就有必要采取措施。...又由于内存空间相对较大,因此可以存储大数据,但会受到内存空间限制; 2、onSaveInstanceState() :使用场景针对于应用被系统回收后重建时对数据的恢复,由于应用进程在这个过程中会消亡,因此不能选择内存存储而只能选择使用持久化存储

    1.2K20

    Android livedata 源码解剖

    说在前面 本次推出 Android Architecture Components 系列文章,目前写好了四篇,主要是关于 lifecycle,livedata 的使用和源码分析,其余的 Navigation...Android lifecycle 使用详解 Android LiveData 使用详解 Android lifecyle 源码解剖 Android livedata 源码解剖 github sample...我们先来回顾一下 LiveData 的特点: LiveData 是一个可以被观察的数据持有类,它可以感知 Activity、Fragment或Service 等组件的生命周期。...,等到下次处于激活状态的时候,在进行相应的处理 如果你想 livedata setValue 之后立即回调数据,而不是等到生命周期变化的时候才回调数据,你可以使用 observeForever 方法,但是你必须在...因为 AlwaysActiveObserver 没有实现 GenericLifecycleObserver 接口,不能感应生命周期。 ?

    98220

    在 Android 开发中使用协程 | 代码实战

    在 Android 的应用中您可以用这种方式解决很多问题,比如对数据的查询、存储或更新,它还很适用于处理列表排序问题。...它使用 LiveData 来存储当前排序的列表数据,以供 UI 进行展示。当出现某个新事件时,sortProductsBy 会启动一个新的协程对列表进行排序,当排序完成后更新 LiveData。...如果您之前没有用过 LiveData,您可以看看这篇由 @CeruleanOtter 写的文章,它介绍了 LiveData 是如何为 UI 保存数据的 —— ViewModels: A Simple Example...有非常多方案能够解决这个问题,既可以在 ViewModel 中解决,又可以在 Repository 中解决。我们来看看怎么才能让一次性请求按照我们所期望的顺序返回结果。...但是如果我们不想这样,或者说不能这样,我们就可以选择这种方法复用已经存在的请求。

    1.2K10

    Android Kotlin小技巧之用Transformations.map方法转换LiveData

    欢迎点击上方"AntDream"关注我,每天进步一点点 在Kotlin中,transformations.map是用于将一个 LiveData 的数据进行转换的拓展函数,它属于 Android Architecture...这个函数允许你在 LiveData 的数据发生变化时,自动地对数据进行某种转换,并返回一个新的 LiveData。...基本上,transformations.map可以理解为函数式编程中的map操作,它会对数据进行一些计算或转换,并返回一个新的数据类型或格式,但还保留了 LiveData 的特性。...主要特点 数据转换:可以将一个 LiveData 的数据类型从一种转换为另一种。 响应式更新:当原始 LiveData 中的数据发生变化时,转换后的 LiveData 也会相应地进行更新。...与观察者模式兼容:仍然保留 LiveData 的特性,可以被观察者观察到。

    19410

    Android Jetpack - LiveData

    ,而已注册但处于非活跃状态的观察者不会被更新 我们可以在实现了 LifecycleOwner 的接口的对象中注册 observer,这种关联允许 observer 在与之相关的 Lifecycle 对象处于...例如,后台活动在返回前台后立即接收最新数据 配置更改友好 如果由于配置更改(例如设备轮换)而重新创建活动或片段,则会立即接收最新的可用数据 资源共享 你可以使用单例模式扩展 LiveData 对象以包装系统服务...与 Room 一起使用 LiveData Room 持久化库支持可观察查询并返回 LiveData 对象,这些查询一般在 DAO 中编写 在更新数据库时,Room 会生成更新 LiveData 对象所需的所有代码...具体可以参考 Android Jetpack - Room 一文所提供的代码示例 转换 LiveData 您可能希望在将 LiveData 对象分派给观察者之前更改存储在 LiveData 对象中的值,...或者您可能需要根据另一个 LiveData对象的值返回不同的 LiveData 实例。

    2K30
    领券