美文网首页Android开发Android开发经验谈Android技术知识
从0开始写一个App(二)关于 动态代理 Android MV

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

作者: 36360851f4da | 来源:发表于2018-12-24 02:26 被阅读9次

   前情提要: 最近忙(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有现成的。

哈哈哈

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

相关文章

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

    前情提要: 最近忙(lan)的一批,说到底还是一条懒狗,周末玩游戏到天亮,睡到下午,妹崽也不理我了。我的app断...

  • 从0开始写一个App(一)关于 Android MVP

    前情提要:前一篇文章写道,本人目前两年半工作经验,就职于手机公司,做过framework,做过整个系统的主题样式,...

  • 反射支撑

    以下讨论的都是Dalvik虚拟机,以 Android4.0.4 为基础 关于动态代理参见Dalvik 动态代理的实...

  • 双开DroidPlugin 源代码一

    Android 插件化,动态代理???一开始我们都会丈二摸不到头脑,晕晕乎乎,不知道如何下手去写这么样的一个东西,...

  • Activity动态调试(一)--动态调试adb dumpsys

    前言 从今天开始我们开始动态调试四大组件的各种场景,其他android开发者写的关于android源码剖析,都是从...

  • Java 动态代理

    前言 关于动态代理 JDK动态代理 CGLIB动态代理 区别 java动态代理是利用反射机制生成一个实现代理接口的...

  • Android动态代理的源码分析

    Android动态代理的源码分析 Android的动态代理和jdk中的动态代理的原理是一样的,但是实现上不一样。 ...

  • 安卓反射和动态代理的应用

    提纲 java反射基础 反射在Android中的应用 Java动态代理 动态代理在Android的应用 java反...

  • java随笔(十一)

    java动态代理源码分析,总结。java动态代理实现步骤: 通过阅读源码发现,动态生成代理对象$Proxy0,该对...

  • 2021-03-19

    【Android设计模式】从Retrofit看懂动态代理模式 - 简书[https://www.jianshu.c...

网友评论

    本文标题:从0开始写一个App(二)关于 动态代理 Android MV

    本文链接:https://www.haomeiwen.com/subject/absokqtx.html