什么是MVP设计模式,以及为什么要用MVP
MVP设计模式是相对于MVC设计模式的,要介绍MVP设计模式,我们首先先了解下什么是MVC设计模式,在MVC设计模式中,Activity应该是属于View这一层。而实际上它既承担了View,同时也包含了一些Controller的东西在里面。我们设计程序的一个基本原则就是高内聚,低耦合。传统的MVC设计模式对于开发和维护来说不太友好,耦合性太高。把Activity的View和Controller抽离出来变成了View和Presenter,这就是MVP设计模式。
MVP的核心思想
MVP把Activity中的UI逻辑抽象成VIew接口,把业务逻辑抽象成Presenter接口,Model类还是原来的Model。
这就是MVP的设计模式,现在这样的话Activity的工作就简单了,只用来响应生命周期,其他的工作都丢到Present中去完成。Present是Model和View的桥梁,为了让结构变得简单,View不能直接对Model进行操作,这也是MVP和MVC最大的不同之处。
MVP设计模式的好处
1、分离了视图逻辑和业务逻辑,降低了耦合。
2、Activity只处理生命周期的任务,代码变得更加简洁。
3、视图逻辑和业务逻辑分别抽象到View和Presenter的接口中去,提高了diamante的可阅读性。
4、Presenter被抽象成接口,可以有多种具体的实现,所以方便进行单元测试。
5、把业务逻辑抽象到Presenter中去,避免了后台线程引用着Activity,导致Activity的资源无法被系统回收从而引起OOM。
其中最重要的有两点:
Activity代码变得更加简洁
相信很多人阅读代码的时候,都是从Activity开始的,对着一个1000+行的代码的Activity看了都觉得难受,
使用MVP之后,Activity就能瘦身许多,基本上只有FindViewById(找到布局)、SetListener(事件处理),以及int的代码其他的都是对Presenter的调用,还有对View接口的实现。这种情况下阅读代码就变得容易多了。
避免Activity的内存泄漏
Android APP发生OOM的最大的原因就是出现内存泄漏造成APP的内存不够用,而造成内存泄漏的原因有很多,其中之一就是Activity泄漏(Activity Leak)
Activity是有生命周期的,用户随时可能切换Activity,当APP的内存不够用的时候,系统会回收处于后台的Activity的资源以避免OOM。
采用传统的MVC模式,一大堆异步任务和对UI的操作都放在Activity中里面,比如你可能从网络上下载一张图片,在下载成功的回调里把图片加载到Activity的imageView里面,所以异步任务保留着对Activity的引用,这样一来,即使Activity已经被切换到后台(onDestroy已经执行),这些异步任务仍然保留着对Activity的引用,所以系统就无法回收这个Activity实例了,结果就是Activity leak。
采用MVP模式,只要在当前的Activity的onDestroy里,分离异步任务对Activity的引用,就能避免Activity Leak。