写点什么

深入浅出:MVVM+ViewBinding,互联网寒冬公司倒闭后

用户头像
Android架构
关注
发布于: 2021 年 11 月 06 日

3.公司要求用 kotlin,所以我不得不用;


4.kotlin 语法简洁,有很多 java 没有的新特性,开发效率高;


5…


这些理由其实都不能打动我,以至于放弃 java 转投 kotlin,因为作为一个将近 10 年的 java 开发者来说,所谓的开发效率问题是不存在的,即便我写 5 行代码,你只用写 1 行代码,在开发效率上我也绝不会比你低,除非老板指定要用 kotlin,那就没办法了。可能大家觉得这样不就是因循守旧,排斥创新了吗?但相信大多数不想去用 kotlin 的同学都会有这样一种心态:“没有用 kotlin 的欲望,因为它仅仅是换了一个编程语言而已,对开发出来的 app 在编译与运行效率上没有任何改变,我还要花大量学习成本,以及可能在开发过程中遇到未知风险,我为什么要用你呢?”


但为什么今天又用 Kotlin 了呢??


其实,做程序开发是一个不断学习的过程,一天不去接触学习新东西,你就会落后甚至过时,所以说当出现新玩意的时候,你可以不用,但不能不会,只有这样,你才能在职业生涯中游刃有余,就像今天说的这个 MVVM 框架,以及 ViewBinding,我相信很多开发者刚把 mvp 模式玩 6,RxJava,Retrofit 弄懂,甚至于有些还在用 mvc 模式,你就告诉我他们统统过时了???我尼玛,这要累死人的节奏???没办法,程序界发展就是这么快,稍不留神你就已经落伍了,这也是为什么程序员吃青春饭这一说法的由来了,你跟不上节奏,甚至于连去跟节奏的心也没有了,那就只能被淘汰了!


闲话说了这么多,进入正题吧!如果你问我,目前最流行的移动端开发模式是什么,我会毫不犹豫的告诉你:MVP+Rxjava+Retrofit+EventBus…,MVP 优点自不必说,但缺点相信现在还在用 MVP 模式的你会深有体会,可以说成也 P,败也 P,随着项目的扩大,界面的增多,接口的增多,P 会越来越多,P 中的回调也会越来愈多,在某个界面想重用某个接口时,如果不想进入回调地狱,就只能再写一个新的 P,相当麻烦。还有一个缺点就是,在使用 p 的时候,总是要实现回调接口,再声明 p,然后 attach,界面销毁时再调用 detach,否则就可能会内存泄漏,这两点是不是不能忍?所以 MVVM 就出现了,对于 MVVM,你可以这么理解,M+V+VM就是把 MVP 的 Presenter 换成 ViewModel,VM 不但可以替代 Presenter 的功能,还能解决 Presenter 的两个缺点,上面说过,本篇不作原理性分析,因为这类文章太多了,再分析分析也是多次一举,所以就直接上代码:


ViewModel 的简单用法:


在 mvp 模式下,当我们有服务器交互也就是需要调用接口时,我们便会为此界面创建一个 Presenter,同样的,mvvm 模式下,我们要为这个界面创建一个 ViewModel,例如我们为 MainActivity 创建 MainViewModel :


class MainViewModel : ViewModel() {


}


需要继承 ViewModel,并且 ViewModel 中一般会配合 LiveData 使用:


class MainViewModel : ViewModel() {


var data = MutableLiveData<String>()


fun getData() {


//模拟数据请求


var result = "请求结果"


data.value = result


}


}


在 MainActivity 中声明,并使用 MainViewModel :


mainViewModel = ViewModelProvider(this).get(MainViewModel::class.java)


mainViewModel.getData()//调用方法,模拟请求数据


mainViewModel.data.observe(this, Observer {//观察 data 变化,相当于接口请求回调函数


textView.text=it


})


LiveData 的 observe,就是一个观察者,发现数据有变化时就会立马通知你,参数 it 就是 MainViewModel 中 MutableLiveData(),<>中声明的数据类型的数据,我们不要像 presenter 一样 需要 attach 和 detach,也不需要些回调接口,只用观察,就这么简单!


再来看 ViewBinding:



文档连接:[https://developer.android.google.cn/topic/libraries/view-bi


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


nding](


)


ViewBinding 和 DataBinding 的区别:


ViewBinding 和 DataBinding 均会生成可用于直接引用视图的绑定类。不过,这两者之间存在明显差异:


1.DataBinding 仅处理使用 代码创建的数据绑定布局。


2.ViewBinding 不支持布局变量或布局表达式,因此它不能用于在 XML 中将布局与数据绑定。


ViewBinding 仅是节省了 findview 的步骤,并且启用后,每当创建一个 xml 布局文件,便会自动生成一个对应的 ViewBinding 类,仅需在界面里的 setContentView 传入 ViewBinding.根视图 root 即可使用,使用方法为 ViewBinding 对象.id


private lateinit var binding: ActivityMainBinding


binding = ActivityMainBinding.inflate(layoutInflater)


setContentView(binding.root)


binding.mRecyclerView.layoutManager = LinearLayoutManager(this)


binding.mRecyclerView.adapter = articleAdapter


使用起来也是相当简单,另外项目中封装了相对简单网络请求,


class HttpUtil {


/**


  • 通用网络请求方法


*/

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
深入浅出:MVVM+ViewBinding,互联网寒冬公司倒闭后