MVP实战 -- 第二篇优化篇

这是第二篇的优化篇,原文地址:http://mp.weixin.qq.com/s/z0mx1tXWf_rDhrWQ2BbW8g
第二篇是一个简单的MVP实例,但是在我们的真实工作中项目往往是很大的,为了减少代码量我们必须要做抽取,这篇优化篇就是在上一篇的基础上进行了基类的抽取,解决了当Activity销毁后,Presenter还持有Activity造成的内存泄漏的问题。还有泛型的运用。话不多说,直接上图。
分包:

图一

Model和上一篇一样,是运用接口回调模拟请求数据:

图二
图三
图四

核心就是那个接口回调,要记住一个核心 -- 接口或者抽象类这类不能实例化的一定要看它的实现类!

View层

在真实项目中我们肯定会有很多的界面,加入我们有很多请求网络的界面,当然每一种这类界面都会有显示和隐藏ProgressBar的逻辑,我们就有必要将这两个方法抽取出来:

图五

然后就是我们相对具体的UI效果了,在这里我们选中的是弹吐司和显示ListView:

图六

接口是可以继承另一个接口的,这样它也拥有父类接口的方法,接口还是可以多继承的,http://www.jianshu.com/p/36b11055c299可以参考我篇文章。
因为Activity界面需要绑定Presenter,所以我们先分析Presenter然后再分析Activity。

Presenter层

往往Presenter层也是有一些共有的逻辑的,这样我们就可以抽取出来,这里我们考虑的事每一个Activity都有相应的生命周期,我们将Activity创建的时候和Presenter关联起来,在Activity销毁的时候将Presenter持有的Activity置为null。

图七

你可能对那个泛型有疑问,泛型一般是为了限制创建对象时传递的参数的,但是这里更多的是一个类似一个抽象的概念,正如我注释掉的那些成员一样,我可能是IView接口,也有可能是其他接口,为了让BasePresenter能适用于任何View就加入了泛型。注意我们这里是抽象的类,而不是接口,我们在MVP中会用到很多接口,不要混淆了,其实抽象类和接口也很好分辨,接口是没有方法体的,它只能定义一个抽象的方法,而抽象类是有具体的方法体的,可以在里面进行逻辑处理,它只是和接口一样不能被实例化,继承抽象类的子类是可以继承抽象类的方法的。
接下来创建一个Presenter来继承这个抽象的BasePresenter。

图八

这里传入的泛型是IView,就代表实现了IView接口的类有了BasePre中的两个方法。我们会在IView的实现类相应的生命周期方法中调用这个两个方法。

View层

分析完Presenter就下来就是界面的调用了,每一个Activity都有相应的生命周期,我们需要在每一个onResume()中去关联Presenter;为了避免内存泄漏又要在onDestory()中将View置为null。所以我们有必要将这两个方法抽取出来。

图九

注意我们是继承了AppCompatActvity,拥有了Activity的所有生命周期,我们只要重写onResume()和onDestory()即可。
这里同样用到了泛型,上面我们也说了这里的泛型更多的是一个抽象的概念,是为了有更好的扩展性。可以适用于任何的Presenter和View,注意调用Presenter或者View中的方法时,一定要先实例化,具体的实例化可以交给子类去实现。

图十

最后就只要在Activity实例化相应的对象和调用相应的方法就可以了,注意我们的内存优化已经在 BaseActivity中完成。
这个例子中运用了继承和泛型的,是一个很不错的例子。多敲几遍相信很让你收获很多。Just have a code!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,589评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,615评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,933评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,976评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,999评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,775评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,474评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,359评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,854评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,007评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,146评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,826评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,484评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,029评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,153评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,420评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,107评论 2 356

推荐阅读更多精彩内容