Android-ViewModel探究
Jetpacak之Room
前言
google官方的数据库框架,可以无缝结合LiveData以及Rxjava结合使用。
文档:Romm doc
api详细:Room summary
基础使用步骤
引入依赖,开启androidx哦
1 | dependencies { |
- 定义实体类 -
Entity
- 定义Dao类 -
Dao
- 定义抽象数据库类 -
Database
- 使用
算法-排序算法复习
Android-MVVM之LiveData和ViewModel
前言
之前归纳了databinding,说到底databinding也只是承载实体数据和UI进行关联,以及它们之间互通,转换。但是呢们开发过程中需要有中间人来控制逻辑,连接后台数据到绑定数据。这个时候ViewModel加上DataBinding以及LiveData就可以很好的组成一种架构模式。我们还是在了解LiveData和ViewModel之后,再结合之前的DataBinding来说MVVM吧。
LiveData
老规矩,首先附上官方文档地址:LiveData
看看官方怎么定义LiveData的:
LiveData是一个可观察对象持有类,不同于平常的可观察对象,LiveData是有生命周期感知的,意味着它会关心app组件的生命周期,比如Activity,fragment,service。这种感知特性保证LiveData只会在生命周期活跃的时候进行观察更新。
LiveData考虑将观察者,在生命周期为started
和resumed
下保持活跃。LiveData仅仅会通知活跃的观察者进行更新,不活跃的观察者不会收到任何通知。
你可以注册观察者并且给他配对实现了LifecycleOwner
的接口的对象。在这层关系下,观察者会在Lifecycle
对象进入destory
时被移除,这个对于fragment
和activity
非常有用,它可以很安全的观察livedata对象,在fragment
和activity
生命周期销毁时,它们会立即解除订阅,不会产生内存泄漏。
Android-MVVM之DataBinding
MVVM一种android架构模式,谷歌官方架构中实现了,包括databinding,viewmodel,livedata,room,lifecycle,等一套用于mvvm架构的架构组件。
前言
整体学习MVVM之前,我们可以先来单独看看DataBinding是干嘛的
首先附上官方文档地址:Data Binding Library ,以及官方demo
官方是这么说的:
数据绑定库是一种支持库,借助该库,您可以使用声明性格式(而非程序化地)将布局中的界面组件绑定到应用中的数据源。
就像下面这样:
1 | <TextView android:text="@{viewmodel.userName}" /> |
诶,好像似曾相识,对了,和那个jsp的el表达式,以及spring中表达式有点像啊。这样就好理解了,xml UI通过某种数据绑定,可以通过这种声明式将数据传到UI中。不得不说有点亲切,哈哈。我下面的写东西也基本上是总结(翻译233)官方文档,所以结构也是一样的。
设计模式归纳
根据《Android源码设计模式解析与实战》总结归纳学习
面向对象的的六大原则
单一职责
一个类应该是一些相关性很高的函数和数据的集合。例如根据功能进行具体划分,每个个体完成自己相应的事。
开闭原则
开放扩展,关闭修改。在软件生命周期迭代过程中,如果对原有代码进行了修改,很有可能引入新的错误,导致整个项目需要重构,并且需要重新测试啥的。所有要通过扩展的形式来,而不是修改。
里氏代换
子类可以扩展父类功能,但不能改变原有父类的功能
依赖倒置
高层模块不依赖底层模块细节,应该依赖抽象。这个也就是申明使用抽象,实现使用细节。
接口隔离
客户端不应当依赖它不需要的接口,类之间的依赖关系应该建立在最小的接口上,不要将过多的功能加在一个接口上。接口的设计粒度越小,系统越灵活,维护降低
迪米特原则
一个类应该只和自己关心的类进行通信。最少知道原则,降低类与类之间的耦合。
Android-事件分发机制
一篇搞懂AsynsTask
Dagger2学习
What
关于IOC(控制反转)
和DI(依赖注入)
,DI
只是IOC
的实现的一种方式,另一种是依赖查找
,详细见 控制反转维基百科
完全静态的依赖注入框架。依赖注入的概念真的是到哪都有,以前学Spring的就天天看它,到了android还是跑不了,现在的dagger是以半静态注入的形式,说白了,通过注解处理器分析注解,生成java代码,将对象池和需要对象的地方连接起来,其实就和自己创键差不多,我就简单总结下怎么用吧(里面的概念我也挺晕乎的,注解处理器那里我也是挺头疼的。)
官网: Dagger users-guide (果然还是还是官方文档讲的好呃呃)
How
引入依赖
1 | implementation 'com.google.dagger:dagger:2.20' |