大家好,我系苍王。
以下是我这个系列的相关文章,有兴趣可以参考一下,可以给个喜欢或者关注我的文章。
[Android]如何做一个崩溃率少于千分之三噶应用app--章节列表
这几个月一直在编写一本叫做《Android组件化架构》的书籍,所以之前的写作时间都用来编写此书了。现在终于到达编辑阶段,请有兴趣的同学耐心等待一下。
有关注我的同学,应该有看过我之前写的组件化路由跳转,介绍了ARouter和ActivityRouter。
之前有组件化章节中介绍过动态创建,说到的反射的形式来初始化Fragment。
这里结合起来,ARouter提供了可以跨module获取Fragment的能力。
使用ARouter注册一个Fragment
编译时注解注册为RouteType为Fragment
然后通过路由导航获取到Fragment
其底层也是提供了反射方案来完成,具体可以看_ARouter.java 的_navigation方法
ARouter已经封装好反射的方法,可以简单调用就可以了。
使用场景:如果模块是单Activity+多Fragments的架构,Fragment作为每个module的入口,那就可以使用此路由方式来启动。
连Fragment也能获取到了,那么如果想将Fragment的初始化方法也封装到module当中,就需要拥有跨module调用方法的能力。
这里需要继承ARouter的IProvider接口
编译时注解会注册RouteType.PROVIDER
使用navigation获取IProvider对象就能直接调用方法了
然后通过获取到Provider的PostCard对象
在LogisticsCenter中的completion方法
先获取缓存中是否有此IProvider对象,没有就会反射创建,然后设置到Postcard的provider对象中
最终PostCard中取出IProvider的实体对象,并返回到navigation调用
其实底层还是通过反射类路径名来完成方法的反射调用。
使用场景:非常适合模块中需要封装一些初始化接口,给外部调用模块调用。例如单例对象封装,某些业务模块中的弹框(登录支付弹框)能很好的解绑到对应的业务模块当中,不需要移到base公用层使用。
如果需要传递参数可以使用直接方法传参,也可以使用Autowired的依赖注入方式。
其原理是传递参数时,封装成一个Bundle对象。
Bundle对象保存在postcard当中
通过Autowired关键字会在编译时注解中生成一个继承ISyring接口的java文件。
这里通过注入跳转后的对象target,然后强转后将对象的变量获取intent中的值。
目标文件中通过@Autowired的注解和inject方法来注入变量参数。
此处还是会使用到反射的,autowire方法通过拼接编译时注解的java文件名,然后使用反射创建对象。
需要注意的是,请使用ARouter的最新版本,1.1.0版本以前,无法获取到Fragment实体。
I‘m Back.
下一节将会更精彩,敬请期待!!!
群号是316556016,也可以扫码进群。我在这里期待你们的加入!!!