总结
Arouter路由,跨模块页面跳转,拦截跳转过程,处理登陆埋点逻辑,控制反转做组件解耦。
1,在组件化和模块话过程中,两个单向依赖的模块间需要页面跳转,例如主app模块依赖a模块,需要跳转到a模块的a1页面,a1油需要跳转到主模块的main页面,但是a1没有依赖主模块啊。
2,startactivity不能使用,因为两个模块间可能没有依赖,隐式跳转可以,但是不能都适用啊,在manifest加很多过滤配置,维护起来不累啊。反射的话也行,通过类的路径拿到class,但都这样干的话影响性能啊。包名和类名也不敢换了。
3,让所有模块都引用arouter模块,由arouter负责跳转。在模块中每个页面加上注解@Router,这是跳转地址。
4,在编译期间,通过注解处理器,扫描所有添加了@Router的类,将地址和Activity的class关系绑定,写入生成的java文件。启动时加载该类,那么在跳转时,只需要build方法传入的根据地址,在该文件中找到对应的页面class,就可以了。
5,关于处理器,有三个,Router,Autowired和拦截器处理器,注入处理器在编译期间负责扫描解析页面中的变量注解,会生成一个xxx$arouter$$Autowired的java文件,在运行时, inject该页面,会Class.forName反射加载该生成类,调用生成类的inject方法,getIntent获取变量,向传入的该页面注入。
6,拦截器注解,自动注册拦截器,编译时,自动生成一个ARouter Interceptors xxx的java文件,xxx就是你的模块名,在arouter运行初始化时,通过生成的该映射java类,执行拦截器加载,实例化拦截器,treemap红黑树实现按照优先级顺序存储。
拦截过程,由拦截器服务interceptorService负责,初始化和拦截都在线程池。
任重而道远
网友评论