释放双眼,带上耳机,听听看~!
1.简介
主要有Android源码阅读设计模式分析,以及第三方框架源码分析。代码最终需要审核。
2.IOC 反射加注解
每个一个小的框架会单独建一个包,其实是模仿别人写 xutils早期的第三方框架 viewIoc http dao 图片加载 思考自己怎么去实现。源码 xutils 和 ButterKnife
3.xutils 源码阅读和使用
// handlerType --> class 获取setContentView()方法 Method setContentViewMethod = handlerType.getMethod("setContentView", int.class); // 反射执行该方法 setContentViewMethod.invoke(activity, viewId); View view = finder.findViewById(viewInject.value(), viewInject.parentId()); if (view != null) { // 可以操作所有修饰 field.setAccessible(true); // 反射注入属性 field.set(handler, view); }
动态代理设计模式不详细介绍,插件开发 Hook技术 再去详细讲解
属性注入 : 利用反射去 获取Annotation –> value –> findViewById –> 反射注入属性
事件注入 :利用反射去 获取Annotation –> value –> findViewById –> setOnclickListener –> 动态代理反射执行方法
4.ButterKnife 源码阅读和使用
@Retention(CLASS) @Target(FIELD) public @interface Bind { /** View ID to which the field will be bound. */ int[] value(); }
@Retention(CLASS) 编译时的注解
流程
1.编译的时候ButterKnifeProcessor 生成 .java –> class文件
2.运行是viewBinder.bind(finder, target, source);
相比较而言 butterKnife可能更加高效 有一个好用的插件 个人推荐butterKnife
4.自己动手
自己实现会增加在开发过程中的一些常用功能,网络注解。读源码:1.使用的时候出了问题,2.想自己去实现,3.我想实现类似的功能。自己实现的方式跟xutils类似。
5.最后扩展
网络检测的问题,下周六开始写Android Studio插件。