从0开始写一个App(二)关于 动态代理 Android MVP

   前情提要: 最近忙(lan)的一批,说到底还是一条懒狗,周末玩游戏到天亮,睡到下午,妹崽也不理我了。我的app断断续续开了个头进展的也不是很快,在家里写代码就是舒服,可以抽烟,要是在公司也能边写代码边抽烟,我早就成了一名大牛了,哈哈哈。


火云邪神镇楼

  进入正题,关于这篇动态代理的MVP是我很久以前在阅读某个大佬的代码demo的时候见到的,当时一头雾水,而且那个项目存在内存大量的泄漏,就没过多研究,最近想在自己项目里面用这种架构,于是想重新研究一下,百度搜一下MVP动态代理,上来就跟我大谈特谈MVC,说实话 ,我不想知道什么是MVC,因为懒,我真的不想知道,所有的文章都要拓展一下,为什么 ,┭┮﹏┭┮ 然后又用专业名词来解释专业名词,看的头大。



开始之前需要具备的知识:java泛型的用法以及注解的用法,关于注解,网上有很多讲的不错的,后续我也会继续终结下,写出来。

说实话 动态代理MVP看起来有点费劲,我找到了之前那个大佬写的代码,重头理了一下,抽出了核心的东西。如果有人对那个大佬写的源码感兴趣的话可以在下面留言。如果还没看过前两种简单的MVP的话,传送门 从0开始写一个App(一)关于 Android MVP - 简书

正因为读着费劲,写出来的东西别人看了才觉得牛批。其实我觉得除了看起来高大上没什么作用,可能是我还没到那个境界,核心思想就是所有的Presenter都通过一个代理类用工厂生成,说的还是有点抽象。继续来看张图吧,是我自己画的。我们继续用前面的计算1+1,来讨论这种MVP的流程。


动态代理MVP流程

上篇文章在介绍Google推荐的MVP的时候,我没去掉mode。其实google的demo里面已经弱化了model层,直接通过一些工具类啊,或者manager类来执行操作就行了。

这里我把model层也删了。所以上面的图看起来也清晰一点

包结构:

包结构

这里增加了一个BaseActivity,用于统一初始化。因为只有一个Activity继承,要不要其实都一样。

看下MainActivity:

MainActivity

这里自定义一个运行时的注解,把Presenter的Class传进去,由于是运行时注解,取值的时候需要用反射,编译时注解的话,需要用注解处理器,这里不做探讨,后续我会补上关于这玩意的用法,或者可以去参考其他的文章,写的都不错的。

继续来看BaseActivity:

BaseActivity

下面的先不管,重点看这个new PresenterProxy<>(PresenterFactory.createPresenter(getClass()));

在newProxy的时候传入了工厂的静态方法createPresenter(getClass()) 写在Factory工厂里面

看下这个方法 

他用反射把存储在注解中的presenter的class取了出来,注意这不是presenter对象,是class 要用的话后续得newInstance(),这里如果看的懵逼的话,去恶补下泛型吧,java基础就不用继续讨论了。

PS:注意这个方法不是泛型方法,他只是定义了一种类型

然后调用工厂的构造方法把class扔进去,

回到BaseActivity,他在OnCreate的时候有个mProxy.onCreate((V)this);这个方法,由于BaseActivity实现了IPresenterProxy接口。所以this可以强转为V,

mProxy.onCreate((V)this);是用来绑定View的。因为我们至始至终还没有看到View接口的初始化,只是MainActivity实现了而已。这里的(V)this V不是指的View,进入这个方法看下:

方法在Proxy代理里面


先看下Proxy代理里面的这个getPresenter(); 

他在Factory里面进行了newInstance,至此Presenter对象也就出来了


继续看:onBindView

View接口的对象丢了进去,这样getView就可以调用View的方法来通知Activity了。

然后在BaseActivity中,通过proxy代理对象可以获得的Presenter对象,在Presenter里面进行1+1的计算,通知Activity拿到结果


核心逻辑就是上面的流程,这玩意在我这个demo里面显得完全没有必要这样搞,但是正式的项目里面是有一定的作用的,一种高度的对零零散散的Presenter的封装。正如我前面的文章所说,MVP显得很冗余,因为有一堆Presenter。

个人感觉这玩意应该没多少人会看,就不贴上所有的类的内容了,感兴趣的老铁留个言,我上传github。

一直很遗憾那个大佬的源码里面没有留下任何联系方式,拜读过后收货很大,有需要的老铁同样可以留言。github有现成的。


哈哈哈

妈的。写完又是半夜两点半,明天上班又拉闸,呜呜呜,睡了。

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

推荐阅读更多精彩内容