最近在面试发现好多公司都会问到MVP框架搭建 ,  所有今天在这里来探讨一下我们经常使用的MVP框架


文章分为以下三个部分

一 .MVP 的概念

二 .MVP 的优缺点

三 .MVP 解决存在的问题

 

一 MVP 的概念

MVP 简单介绍

View层只负责视图的显示以及更新
Model只负责数据的获取(如网络请求等)
Presenter层则是负责View和Model通信的桥梁,接收model请求的结果后返回给View,或者接收View层的信息后到Model层进行请求,以及一些逻辑

二 MVP优缺点

MVP优点:

模型与视图完全分离,我们可以修改视图而不影响模型;
可以更高效地使用模型,因为所有的交互都发生在一个地方——Presenter内部;
我们可以将一个Presenter用于多个视图,而不需要改变Presenter的逻辑。这个特性非常的有用,因为视图的变化总是比模型的变化频繁;
如果我们把逻辑放在Presenter中,那么我们就可以脱离用户接口来测试这些逻辑(单元测试)。

MVP缺点:

视图和Presenter的交互会过于频繁,使得他们的联系过于紧密。也就是说,一旦视图变更了,presenter也要变更。

三 MVP 解决存在的问题

 

1.会造成接口类爆炸问题。使用MVP模式去构建项目,会造成类文件和接口文件的过多,进而增大包的体积

解决 写一个Contract接口,然后把与MVP相关接口全部列入到里面去

2.会造成内存泄漏的问题。当用户关闭了View层,但这时Model层如果仍然在进行耗时操作,因为Presenter层也持有View层的引用,所以造成垃圾回收器无法对View层进行回收,这样一来,就造成了内存泄漏。

解决 可以重写onDestroy()方法,在View销毁时强制回收掉Presenter;或是采用弱引用的方式

(引用进行引用之前,都需要判断引用不为空,以防止空指针异常。)