安卓面试题到处攒,一到面试就忘个干净?来看看这份超详细的整理( 四 )


7、介绍一下你们之前做的项目的架构这个问题大家就真实回答就好,重点是要说完后提出对自己项目架构的认同或不认同的观点,也就是要有自己的思考和想法 。
MVP,MVVM,MVC 区别MVC
架构介绍
Model:数据模型,比如我们从数据库或者网络获取数据View:视图,也就是我们的xml布局文件Controller:控制器,也就是我们的Activity
模型联系
View --> Controller,也就是反应View的一些用户事件(点击触摸事件)到Activity上 。Controller --> Model, 也就是Activity去读写一些我们需要的数据 。Controller --> View, 也就是Activity在获取数据之后,将更新内容反映到View上 。
这样一个完整的项目架构就出来了,也是我们早期进行开发比较常用的项目架构 。
优缺点
这种缺点还是比较明显的,主要表现就是我们的Activity太重了,经常一写就是几百上千行了 。造成这种问题的原因就是Controller层和View层的关系太过紧密,也就是Activity中有太多操作View的代码了 。
但是!但是!其实Android这种并称不上传统的MVC结构,因为Activity又可以叫View层又可以叫Controller层,所以我觉得这种Android默认的开发结构,其实称不上什么MVC项目架构,因为他本身就是Android一开始默认的开发形式,所有东西都往Activity中丢,然后能封装的封装一下,根本分不出来这些层级 。当然这是我个人看法,可以都来讨论下 。
MVP
架构介绍
之前不就是因为Activity中有操作view,又做Controller工作吗 。所以其实MVP架构就是从原来的Activity层把view和Controller区分开,单独抽出来一层Presenter作为原来Controller的职位 。然后最后演化成,将View层写成接口的形式,然后Activity去实现View接口,最后在Presenter类中去实现方法 。
Model:数据模型,比如我们从数据库或者网络获取数据 。View:视图,也就是我们的xml布局文件和Activity 。Presenter:主持人,单独的类,只做调度工作 。
模型联系
View --> Presenter,反应View的一些用户事件到Presenter上 。Presenter --> Model, Presenter去读写操作一些我们需要的数据 。Controller --> View, Presenter在获取数据之后,将更新内容反馈给Activity,进行view更新 。
优缺点
这种的优点就是确实大大减少了Activity的负担,让Activity主要承担一个更新View的工作,然后把跟Model交互的工作转移给了Presenter,从而由Presenter方来控制和交互Model方以及View方 。所以让项目更加明确简单,顺序性思维开发 。
缺点也很明显:首先就是代码量大大增加了,每个页面或者说功能点,都要专门写一个Presenter类,并且由于是面向接口编程,需要增加大量接口,会有大量繁琐的回调 。其次,由于Presenter里持有了Activity对象,所以可能会导致内存泄漏或者view空指针,这也是需要注意的地方 。
MVVM
架构介绍
MVVM的特点就是双向绑定,并且有google官方加持,更新了Jetpack中很多架构组件,比如ViewModel,Livedata,DataBinding等等,所以这个是现在的主流框架和官方推崇的框架 。
Model:数据模型,比如我们从数据库或者网络获取数据 。View:视图,也就是我们的xml布局文件和Activity 。ViewModel:关联层,将Model和View绑定,使他们之间可以相互绑定实时更新
模型联系
View --> ViewModel -->View,双向绑定,数据改动可以反映到界面,界面的修改可以反映到数据 。ViewModel --> Model, 操作一些我们需要的数据 。
优缺点
优点就是官方大力支持,所以也更新了很多相关库,让MVVM架构更强更好用,而且双向绑定的特点可以让我们省去很多View和Model的交互 。也基本解决了上面两个架构的问题 。
8、具体说说你理解的MVVM1)先说说MVVM是怎么解决了其他两个架构所在的缺陷和问题: