Jetpack我们从MVVM开始讲起-ViewModel LiveData Lifecycle

拉大锯 难度· 初级 围观人数· 2832
开始学习
¥9,999.00 VIP免费 学习人数· 268

必备知识


掌握android基础课程



课程内容


在开始Jetpack相关的课程之前,我们先从MVVM开始讲起。google推荐我们的应用架构是MVVM。



原连接地址:[应用架构指南]


https://developer.android.com/jetpack/docs/guide


为了达到实现这个架构,我们应该学习什么知识。Jetpack各组件充当着什么角色。


什么是MVVM呢?


MVC


我们先从MVC开始讲起


以前我们的Android开发,开始流行的是MVC结构,这套东西其实是从后台里借鉴过来的,比如说禅道的PHP项目,连命名都按这个规范。



那这几块负责什么职责呢?


我们先是认清楚了各个模块负责什么东西


然后再来看看这个MVC组件之间的经典合作



PS:注意,是经典合作。不是必须这样做,这只是其中一种合作方式。


在不同的项目开发里面,分别有不同的内容充当MVC。


那在Android里是什么充当View,什么充当Model,什么充当Controller呢?


View:Acitivity(View)、Fragment(View)视图,在android里xml布局转成View后,加载到了Activity/Fragment里了。


Controller:Controller对应着Activity/Fragment,绑定UI,处理各种业务。


Model:数据的获取,存储,更新,domain


优点


view与model隔离,view换了,model不影响。model换其他的数据源,view层也不受影响。一个view可以连接多个model,有些model可以复用。比如说你这个页面需要用户信息,另外一个界面也需要用户信息。


缺点


这里我们主要指Android上的缺点,不适合在Android开发上使用。在Android开发中,View的相关内容和Controller都写到一起了,会让Activity/Fragment越来越臃肿。


MVP


于是大家都觉得MVC套在Android上不好。VC的代码会越来越多,如果要处理复杂的逻辑,Activity的代码上千上行。于是大家开始剥离VC里的代码。


这个用起来爽了很多,Activity的代码量也没这么多了。


大量的逻辑代码抽取到了Presenter层。


同学们可以学习一下我们的两个项目


[《喜马拉雅FM电台》](https://www.sunofbeach.net/c/1182379694310326272)和[《恰饭联盟》](https://www.sunofbeach.net/c/1202062476531847168)


这两个项目就是MVP的架构


- View:Activity、Fragment

- Presneter:逻辑层

- Model:数据处理


在MVP架构中,我们设计到的内容是调用逻辑层的方法和更新UI,这是最简单的。


问题点就是:怎么调用逻辑层的方法呢?怎么通知UI更新呢?


View层持有Presenter层的引用或者通过管理类管理Presenter,总之View可以直接拿到Presenter,这样子,View就可以调用Presenter里的方法了。比如说Presenter你给我获取一个这个页面的分类。


Presenter层如何更新UI呢?当View层去获取/创建Presenter的时候,把接口给到Presenter,比如说Presenter层获取到分类以后,通过接口更新UI即可。


这样子,我们这个来回就完事了。Presenter层则通过Model层去拿数据。


优点


剥离了View和Controller,解决了复杂的业务Activity过于庞大的问题


缺点


- 更新UI需要主意线程,UI控件是否已经销毁


  


 假如我们去请求一个数据,这个时候请求是耗时的,数据回来了,可是界面已经被用户关掉了,数据回来以后,我们得判断UI控件是否还存在。


- 如果多个地方使用到同一个Presenter,可能会存在一些用不上的接口


  


 还是有的,我们在喜马拉雅FM电台里就有体现出来。


 比如说我们的播放器逻辑层PlayerPresenter,我们对应需要通知UI的接口有开始播放,暂停播放,缓冲中,播放失败,下一首,上一首,播放模式改变...


 如果我们多个地方使用到这个Presenter。比如说首页,详情页面,播放器页面。播放器页面使用这个Presenter实现这个接口没问题,都用得上。可是我的首页,只需要暂停播放和播放呀,其他的状态并不需要。


 一大堆用不上的接口


MVVM ...... 详情请到资料里下载吧!


第一章:了解Jetpack
这个章节我们了解一下Jetpack是啥
1、什么是Jetpack? 开始学习
第一章:MVC到MVP的历史
我们在学习MVVM之前,先了解一下什么是MVC,什么是MVP。它们的优点,缺点是什么,在我们开发中担当者什么角色
2、了解MVC架构 开始学习
3、MVC各模块关系 开始学习
4、MVC架构在Android开发中的优缺点 开始学习
5、把MVC架构改造成MVP架构 开始学习
6、MVP各模块的关系图 开始学习
7、MVP架构在安卓开发中的优缺点.avi 开始学习
8、表演一下MVP的缺点 开始学习
第三章:开始MVVM表演吧
前面我们知道了演变过程,接下来我们就学习一下MVVM吧
9、UI驱动开发 开始学习
10、细粒化监听数据变化,由数据通知UI更新 开始学习
11、音乐列表的例子再次尝试监听数据变化的好处 开始学习
12、确保数据更新通知是通过主线程进行分发 开始学习
13、复习Activity的生命周期 开始学习
14、View通知Presenter层生命周期变化 开始学习
15、让其他的Activity也可以通知Presenter生命周期状态变化(2) 开始学习
16、抽取LifecycleProvider来完成生命周期通知的管理 开始学习
17、把View生命周期变化的注册交给逻辑层 开始学习
18、让数据容器也具备感知View生命周期变化的能力 开始学习
19、解释为什么数据容器可以感知View的生命周期变化 开始学习
第四章:Lifecycle
到这里,我们可以学习一下Lifecycle了!看看如何感知UI的生命周期变化呢
20、介绍Jetpack之Lifecycle 开始学习
21、Lifecycle基本使用一 开始学习
22、Lifecycle基本使用二 开始学习
23、代码分析View层生命周期变化如何通知Lifecycle 开始学习
24、代码分析如何通知监听者View层生命周期变化了 开始学习
25、源码分析如何通知注解的方式监听生命周期变化 开始学习
26、注解方式的回调方法获取到LifecyclerOwner和Event 开始学习
第五章:LifeData
其实前面我们已经表演过给大家怎如何实现的了,现在我们使用一下官方的API感知数据变化吧
27、LiveData介绍 开始学习
28、LiveData的基本使用 开始学习
29、LiveData另外一种添加观察者的方式监听数据变化 开始学习
30、LiveData共享数据 开始学习
31、LiveData如何确保数据在主线程更新 开始学习
32、LiveData如何通知观察者数据更新了 开始学习
33、LiveData如何感知View层的生命周期变化 开始学习
第六章:MVVM再次
这次我们通过官方的API,官方提供的包,基于jetpack来实现MVVM架构
34、MVVM介绍 开始学习
35、ViewModel介绍 开始学习
36、再次认识Jetpack 开始学习
37、MVVM案例-搭建架子 开始学习
38、MVVM案例-封装网络请求 开始学习
39、MVVM案例-请求特惠页面的数据 开始学习
40、MVVM案例-显示特惠页面的数据 开始学习
41、MVVM案例-调整特惠内容UI列表的样式 开始学习
42、MVVM案例-处理网络请求的多种状态 开始学习
43、MVVM案例-集成刷新or加载更多的控件 开始学习
44、MVVM案例-加载更多数据 开始学习
45、MVVM案例-案例回顾 开始学习
46、ViewModel源码分析-创建 开始学习
47、ViewModel是如何跟View的生命周期挂钩的 开始学习