Submit Search
Upload
MVVM.pptx
•
Download as PPTX, PDF
•
0 likes
•
3 views
B
binlu33
Follow
A brief description of google livedata
Read less
Read more
Internet
Report
Share
Report
Share
1 of 14
Download now
Recommended
Mvc 架构
Mvc 架构
cyla993
Mvp
Mvp
7hihi
前端Mvc探讨及实践
前端Mvc探讨及实践
taobao.com
KSDG-ASP.NET MVC 5 Overview (偽三國誌)
KSDG-ASP.NET MVC 5 Overview (偽三國誌)
Bruce Chen
ASP.NET MVC简介
ASP.NET MVC简介
Du Wanzhi
Asp.net mvc 基礎
Asp.net mvc 基礎
Gelis Wu
前端Mvc探讨及实践
前端Mvc探讨及实践
enmaai
twMVC#10 | ASP.NET MVC Model 的設計與使用
twMVC#10 | ASP.NET MVC Model 的設計與使用
twMVC
Recommended
Mvc 架构
Mvc 架构
cyla993
Mvp
Mvp
7hihi
前端Mvc探讨及实践
前端Mvc探讨及实践
taobao.com
KSDG-ASP.NET MVC 5 Overview (偽三國誌)
KSDG-ASP.NET MVC 5 Overview (偽三國誌)
Bruce Chen
ASP.NET MVC简介
ASP.NET MVC简介
Du Wanzhi
Asp.net mvc 基礎
Asp.net mvc 基礎
Gelis Wu
前端Mvc探讨及实践
前端Mvc探讨及实践
enmaai
twMVC#10 | ASP.NET MVC Model 的設計與使用
twMVC#10 | ASP.NET MVC Model 的設計與使用
twMVC
ASP.NET MVC Model 的設計與使用 twMVC#10
ASP.NET MVC Model 的設計與使用 twMVC#10
twMVC
Mvc
Mvc
Yun-tao Chen
Single-Page Application Design Principles 101
Single-Page Application Design Principles 101
Jollen Chen
MVC MVVM MVVMC
MVC MVVM MVVMC
Ng Hui Qin
Asp.net mvc 從無到有 -twMVC#2
Asp.net mvc 從無到有 -twMVC#2
twMVC
twMVC#02 | ASP.NET MVC 從無到有
twMVC#02 | ASP.NET MVC 從無到有
twMVC
與 Asp.net mvc 的第一次親密接觸 - twMVC#1
與 Asp.net mvc 的第一次親密接觸 - twMVC#1
twMVC
Asp.Net Mvc 1.0
Asp.Net Mvc 1.0
Chui-Wen Chiu
Asp.Net MVC 一教就上手
Asp.Net MVC 一教就上手
Study4TW
KSDG#8_net第一次親密接觸_Brian Cheng
KSDG#8_net第一次親密接觸_Brian Cheng
Stipc Nsysu
技术框架对比
技术框架对比
Tony Deng
ASP.NET MVC The Begining
ASP.NET MVC The Begining
Simon Huang
2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練4
2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練4
Duran Hsieh
利用 ASP.NET MVC 提升您的 Web 應用程式
利用 ASP.NET MVC 提升您的 Web 應用程式
Chui-Wen Chiu
twMVC#04 | ASP.NET MVC 4 新功能介紹(快速上手)
twMVC#04 | ASP.NET MVC 4 新功能介紹(快速上手)
twMVC
ASP.NET MVC 4 新功能介紹(快速上手) -twMVC#4
ASP.NET MVC 4 新功能介紹(快速上手) -twMVC#4
twMVC
twMVC#01 | ASP.NET MVC 的第一次親密接觸
twMVC#01 | ASP.NET MVC 的第一次親密接觸
twMVC
twMVC#20 | ASP.NET MVC View 開發技巧小錦囊
twMVC#20 | ASP.NET MVC View 開發技巧小錦囊
twMVC
Ch1
Ch1
dreamy318
Asp.net+mvc4框架揭秘
Asp.net+mvc4框架揭秘
Zhenhua Tang
More Related Content
Similar to MVVM.pptx
ASP.NET MVC Model 的設計與使用 twMVC#10
ASP.NET MVC Model 的設計與使用 twMVC#10
twMVC
Mvc
Mvc
Yun-tao Chen
Single-Page Application Design Principles 101
Single-Page Application Design Principles 101
Jollen Chen
MVC MVVM MVVMC
MVC MVVM MVVMC
Ng Hui Qin
Asp.net mvc 從無到有 -twMVC#2
Asp.net mvc 從無到有 -twMVC#2
twMVC
twMVC#02 | ASP.NET MVC 從無到有
twMVC#02 | ASP.NET MVC 從無到有
twMVC
與 Asp.net mvc 的第一次親密接觸 - twMVC#1
與 Asp.net mvc 的第一次親密接觸 - twMVC#1
twMVC
Asp.Net Mvc 1.0
Asp.Net Mvc 1.0
Chui-Wen Chiu
Asp.Net MVC 一教就上手
Asp.Net MVC 一教就上手
Study4TW
KSDG#8_net第一次親密接觸_Brian Cheng
KSDG#8_net第一次親密接觸_Brian Cheng
Stipc Nsysu
技术框架对比
技术框架对比
Tony Deng
ASP.NET MVC The Begining
ASP.NET MVC The Begining
Simon Huang
2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練4
2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練4
Duran Hsieh
利用 ASP.NET MVC 提升您的 Web 應用程式
利用 ASP.NET MVC 提升您的 Web 應用程式
Chui-Wen Chiu
twMVC#04 | ASP.NET MVC 4 新功能介紹(快速上手)
twMVC#04 | ASP.NET MVC 4 新功能介紹(快速上手)
twMVC
ASP.NET MVC 4 新功能介紹(快速上手) -twMVC#4
ASP.NET MVC 4 新功能介紹(快速上手) -twMVC#4
twMVC
twMVC#01 | ASP.NET MVC 的第一次親密接觸
twMVC#01 | ASP.NET MVC 的第一次親密接觸
twMVC
twMVC#20 | ASP.NET MVC View 開發技巧小錦囊
twMVC#20 | ASP.NET MVC View 開發技巧小錦囊
twMVC
Ch1
Ch1
dreamy318
Asp.net+mvc4框架揭秘
Asp.net+mvc4框架揭秘
Zhenhua Tang
Similar to MVVM.pptx
(20)
ASP.NET MVC Model 的設計與使用 twMVC#10
ASP.NET MVC Model 的設計與使用 twMVC#10
Mvc
Mvc
Single-Page Application Design Principles 101
Single-Page Application Design Principles 101
MVC MVVM MVVMC
MVC MVVM MVVMC
Asp.net mvc 從無到有 -twMVC#2
Asp.net mvc 從無到有 -twMVC#2
twMVC#02 | ASP.NET MVC 從無到有
twMVC#02 | ASP.NET MVC 從無到有
與 Asp.net mvc 的第一次親密接觸 - twMVC#1
與 Asp.net mvc 的第一次親密接觸 - twMVC#1
Asp.Net Mvc 1.0
Asp.Net Mvc 1.0
Asp.Net MVC 一教就上手
Asp.Net MVC 一教就上手
KSDG#8_net第一次親密接觸_Brian Cheng
KSDG#8_net第一次親密接觸_Brian Cheng
技术框架对比
技术框架对比
ASP.NET MVC The Begining
ASP.NET MVC The Begining
2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練4
2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練4
利用 ASP.NET MVC 提升您的 Web 應用程式
利用 ASP.NET MVC 提升您的 Web 應用程式
twMVC#04 | ASP.NET MVC 4 新功能介紹(快速上手)
twMVC#04 | ASP.NET MVC 4 新功能介紹(快速上手)
ASP.NET MVC 4 新功能介紹(快速上手) -twMVC#4
ASP.NET MVC 4 新功能介紹(快速上手) -twMVC#4
twMVC#01 | ASP.NET MVC 的第一次親密接觸
twMVC#01 | ASP.NET MVC 的第一次親密接觸
twMVC#20 | ASP.NET MVC View 開發技巧小錦囊
twMVC#20 | ASP.NET MVC View 開發技巧小錦囊
Ch1
Ch1
Asp.net+mvc4框架揭秘
Asp.net+mvc4框架揭秘
MVVM.pptx
1.
MVVM架构模式 分享人:李阳 ____________
2.
01 02 MVVM简介 ViewModel 03 04 LiveData 简单使用 目录
3.
MVVM 是 Model-View-ViewModel的缩写,是一种架构模式,一种思想,区别于我们常说 的设计模式。 Model:模型,一般指后端下发数据; View:视图,一般指我们看到的页面,负责显示数据和获取用户操作; ViewModel:视图模型,是MVVM的核心部分,以数据驱动,它是连接View和 Model的桥梁。 常见的架构模式:MVC、MVP、MVVM,此处所讲的MVVM是基于google的 Jetpack组件LifeCycle、LiveData、ViewModel构成的,于Androidx环境中使用并 维护的。 1.1 什么是MVVM
4.
两个方向: 一是将[视图]转化为[模型],即将所看到的页面转化为后端的数据。实现方 式是:事件监听。 二是将[模型]转化为[视图],即将后端传递的数据转为成所看到的页面。实 现方式是:数据绑定。 这两个方向都实现的,我们称之为数据的双向绑定。 1.2 MVVM数据流向
5.
Model的数据模型只包含状态,ViewModel所封装出来的数据模型包含视图的状态和 行为两部分,这样的封装使得ViewModel可以完整地去描述View层。 ViewModel类似中转站(Value Converter),负责转换Model中的数据对象,使得数 据变得更加易于管理和使用。 职责主要是管理和提供和UI相关的数据。 2.1 ViewModel
6.
LiveData的实现上可以说是订阅发布模式+生命周期感知,对于 Activity/Fragment等LifecycleOwner来说LiveData是观察者,监听者生命周 期,而同时LiveData又是被观察者,我们通过观察LiveData,实现数据和 View的关系构建。 LiveData是google发布的生命周期组件(lifecycle-aware components)中的 一个组件,除了能实现数据和View的绑定响应之外,它最大的特点就是具备 生命周期感知功能,这使得他具备以下优点: 1、解决内存泄漏问题; 2、解决常见的View空异常; 3.1 LiveData
7.
①内存泄露: 由于LiveData会在Activity/Fragment等具有生命周期的lifecycleOwner onDestory的时候执行removeObserve,使自己与观察者自动解绑,所以 解决了可能存在的内存泄漏问题。之前我们为了避免这个问题,一般有注 册绑定的地方都要解绑,而LiveData利用生命周期感知功能解决了这一问 题。 ②NPE: 我们通常在一个异步任务回来后需要更新View,而此时页面可能已经被回 收,导致经常会出现View空异常,而LiveData由于具备生命周期感知功 能,在界面可见的时候才会进行响应,如果在界面不可见的时候发起 notify,会等到界面可见的时候才进行响应更新,所以就很好的解决了空异 常的问题。 3.2 LiveData优点
8.
首先Activity/Fragment实现LifecycleOwner接口,内部有一个LifecycleRegistry存 放生命周期State、Event等。 每个A/F在启动时都会自动添加进来一个无界面的Fragment,由于添加进来的 Fragment与A/F的生命周期是同步的,所以当A/F执行相应生命周期方法的时候, 同步的也会执行无界面Fragment的生命周期方法,它会在执行自己生命周期方法 的时候更新A/F的LifecycleRegistry里的生命周期State、Event,并且 notifyStateChanged来通知监听A/F生命周期的观察者。 这样就到达了生命周期感知的功能,其实是一个隐藏的Fragment来实现了监听者 能感知到A/F的生命周期。 只要LiveData注册了A/F的LifecycleOwner接口监听,也就拥有了感知生命周期的 能力。 3.3 LiveData感知生命周期原理
9.
LiveData的粘性指的是消息可以在observer注册之前发送,当observer注册时,依然可 接收到之前发送的这个消息。 比如有一个数据mUser(LiveData)在A页面setValue()之后,然后再从A页面打开B页 面,在B页面中开始订阅该LiveData,B页面打开的时候生命周期方法执行,会进行 notify,此时又同时满足页面是从不可见变为可见、数据版本不一致等条件,所以一开 始进B页面,B页面的订阅就会被响应。 这就是所谓的粘性,A页面在发消息的时候B页面是还没创建还没订阅该数据的,但是 进入B页面订阅,之前在A中发的消息就会被响应。 3.4 LiveData的粘性
10.
4.1 VM示例代码
11.
获取ViewModel对象实例,通过vm获取LiveData并添加观察者,此时当数据改变, LiveData调用set或者post方法后,通知观察者,变更UI。 4.2 Fragment、Activity监听数据变化
12.
方式一: ViewModelProviders.of(this).get(LiveViewModel.class); 这种方式创建的VM对象和this是一一绑定的,即在Activity1处,多处获取VM对象,对 象地址值是一个,即是同一个VM对象。 方式二: getDefaultViewModelProviderFactory().create(LiveViewModel.class); 这种方式创建的VM对象是不同的,每次调用都会创建一个新的VM对象。 4.3 ViewModel对象的创建方式
13.
MVVM进一步降低了代码的耦合,通过传入Fragment或者activity获取实例,并由 lifecycle统一管理生命周期与监听,已尽可能防止内存泄露发生。 但是如果一味将逻辑处理放入vm中,则可能造vm过于臃肿,所以需要比较严格的遵守 单一责任原则,只负责提供和管理UI数据,手段根据业务自行使用,比如vm和 presenter结合等。 当然VM还有很多使用注意点,比如不可持有context等,这里就不在详述了。 对于架构模式的使用,仁者见仁智者见智,不存在哪个一定比哪个更强更好,选用适 合的即可,学习更新的思想,用于实践即可。 总结
14.
THANK YOU! 分享人:李阳
Editor's Notes
设计模式和架构模式: 设计模式:对重复出现问题的总结和解决实践。https://www.cnblogs.com/FlyAway2013/p/10163221.html 架构模式:也叫架构风格,描述软件系统的基本结构和纲要。 https://medium.com/@givemepass/android-mvvm-%E6%9E%B6%E6%A7%8B-%E4%B8%80-375192753d25 非Androidx环境:已经不维护。 implementation 'android.arch.lifecycle:extensions:1.1.1' annotationProcessor "android.arch.lifecycle:compiler:1.1.1" 数据驱动
既然是数据驱动,肯定有数据流向; 比较流向的有vm+dataBinding或者直接使用LiveData;此处后者。
不会随着设置变更而销毁,即act旋转销毁重新创建,但是vm存在。 1、vm可以共享多个Fragment中的数据。 2、vm可以和livedata共同使用。
https://juejin.im/post/6844903728877846542 为什么会有这些优点呢?
1.destroy时自动解绑; 2.页面可见的才执行响应方法;
首先Activity/Fragment是LifecycleOwner(26.1.0以上的support包中Activity已经默认实现了LifecycleOwner接口),内部都会有一个LifecycleRegistry存放生命周期State、Event等。而真正核心的操作是,每个Activity/Fragment在启动时都会自动添加进来一个Headless Fragment(无界面的Fragment),由于添加进来的Fragment与Activity的生命周期是同步的,所以当Activity执行相应生命周期方法的时候,同步的也会执行Headless Fragment的生命周期方法,由于这个这个Headless Fragment对我们开发者来说是隐藏的,它会在执行自己生命周期方法的时候更新Activity的LifecycleRegistry里的生命周期State、Event, 并且notifyStateChanged来通知监听Activity生命周期的观察者。这样就到达了生命周期感知的功能,所以其实是一个隐藏的Headless Fragment来实现了监听者能感知到Activity的生命周期。
如果不想有这个粘性也没问题,跟踪源码能发现观测的回调判断处有关version,手动设置这个version大小即可不触发粘性。
方式二,从create处逆向跟了部分源码,发现都是create,最后调到了方式一的底层创建方法,用代码也验证了,及时在同一个方法内,这么获取的vm对象也不同,暂时没懂
https://v.qq.com/x/page/m0605c1sejh.html vm里不要有act。f。view的引用,即不要传入context,因为act销毁,但是vm持有act的this,则vm持有了一个本应回收的对象,导致不能回收,造成内存泄露。 vm不可替换onSaveInstanceState,后者存小量对象,比如一个用户的id而不是整个用户对象数据。 经测试,act销毁,vm的clear优先于act的ondestroy方法,但是具体vm对象的销毁回收时机暂未研究明白,需要深入源码查看。
Download now