阿里ARouter源码分析
来源:互联网 发布:河北经济网络频道 编辑:程序博客网 时间:2024/06/01 09:57
开源最佳实践:Android平台页面路由框架ARoute
ARoute源码分析
上面2篇博客已经介绍了ARouter的原理和作用, 我补充一下自己的想法:
1、 ARouter应该是参考了SpringMVC, 通过URI字符串打开Activity/Service/Fragment。
2、ARouter要缓存ApplicationContext或者当前Activity的上下文, 在打开Activity时必然遇到是否配置Intent.FLAG_ACTIVITY_NEW_TASK的问题, 影响正常的界面跳转逻辑;
3、ARouter使用静态变量缓存context, 如果保存的是Activity的上下文则必须要在Activity的onDestory函数里置空;
4、ARouter的核心作用就是通过URI找到类完整路径后反射并实例化。
5、ARouter使用了Android的APT技术,跟常用的ButterKnife原理是一样的; ARoute会在编译时动态注入uri和类完整路径的映射关系; 是由AutowiredProcessor,InterceptorProcessor和RouteProcessor这3个类实现的。
6、初始化ARoute时, 会反射出注解生成的类并拿到URI和类路径对应关系;
以ARouter源码的demo为例:
运行时加载映射关系:
以打开Activity为例, 出入路径URI后从Warehouse.routes里取出对应的类路径, postcard.getDestination()反射出类。
问题:ARouter真的适用于项目吗?
答:我觉得作用有限,即使是大型项目也不建议使用。我的理由:
1、 ARouter的核心是通过APT在dex文件中添加*$$*.java,配置并读取uri与类路径的对应关系; 说到底还是本地逻辑,不够灵活;
2、如果真想实现作者的解耦目的, 我建议通过后台接口实现; 即服务端配置uri和类路径的对应关系, 客户端通过网络连接获取并解析。 既能实现类之间的解耦, 也更加灵活可配置。
3、不适用于插件化的app, 因为ARouter无法打开未安装包中的组件, ARouter只能打开已安装app的组件;
ARouter的想法是好的, 即通过URI映射出类实例, 但由于是本地逻辑不够灵活, 应该做成像A/B Test那样使用网络接口配置uri对应哪个类。
- 阿里ARouter源码分析
- 阿里路由框架--ARouter 源码解析之初始化ARouter
- (4.2.40)阿里开源路由框架ARouter的源码分析
- ARouter源码分析初始化以及跳转
- [源码]ARouter
- 阿里路由框架--ARouter 源码解析之Compiler
- 浅谈Android模块化设计(路由框架ARouter源码分析)
- ARouter 拦截器与路由的实现(源码分析)
- ARouter源码解析06-openDebug
- Android平台阿里页面路由ARouter
- 阿里ARouter使用及原理详细介绍
- ARouter
- ARouter源码解析01-编译生成文件
- ARouter源码解析02-加载路由表单
- ARouter源码解析03-路由跳转
- ARouter源码解析04-interceptor拦截器
- ARouter源码解析05-自动参数注入
- ARouter 依赖注入实现原理(源码解析)
- Invalid bitcode signature
- QT学习心得-关于pro配置出现的问题
- 数据库练习(二)三个数据库根据指定id获取name和存储数据库名称
- 重写strrchr函数
- 每日一练 字体相关总结
- 阿里ARouter源码分析
- (二) Basic Classification Example with TensorFlow
- 复数变量传递(超简单)----pycuda
- 怎么向表结构是自增长的表中插入一条数据 SQLCODE=-798, SQLSTATE=428C9, SQLERRMC=ID
- Nginx 集群和IP反向代理
- 设置外键约束的SQL语句: @著一
- 03.类的连接之验证、准备、解析
- js 实现md5加密
- 如何在QML中调用在C++中定义的Video MediaPlayer