【转】ARouter原理

ARouter原理(面对初学者)

我们平时写Intent

Intent intent = new Intent(this, xxxx.class);
startActivity(intent)

假如在moduleA中写这段代码,但是xxxx是moduleB中的类,不应用的情况下肯定报红,你编译不过。
但其实这里的Intent构造方法是传的Class<?> 对象,所以我们可以不在这明确写xxxx.class。我可以在某个地方Class<?> cls = xxxx.class,然后传这个cls

ARouter的原理就是所有的moudle都引用ARouter,然后再moudle中去生成一个映射表,然后再把这个映射表传到ARouter中。如果还是不是很理解,可以先继续往下看

1. 映射表生成

我们一般配置ARouter会这样写

@Route(path = xxx/xxx)
public class xxx{
    ......
}

 

这个会在编译时生成一个文件,在build/intermediates/javac/....../classes/com/alibaba/....../routes/下,会看到一堆生成的.class文件

 
 

随便打开一个看看
 
 

看得出这就是一个映射表Map<String, RouteMeta>
某个module引用ARouter并且使用@Route注释的话都会生成一个这样的文件。
原理就在这里,想必猜都能猜得出,在ARouter中有提个Map<String, RouteMeta> 对象的映射表,然后在某个时候,会调用所有module中的这些文件的loadInto方法,把这个映射表传过来,做put操作。也就是下层的对象在上层传入Class<?>
如果到这里还是看不懂,建议多捋几次,这就是ARouter能实现module之间不引用的情况下又能实现显示Intent的办法。如果让你自己写一个ARouter框架,也是利用上面这招来弄。


作者:键盘上的麒麟臂
链接:https://www.jianshu.com/p/c3aab4db086d
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
posted @ 2021-11-18 10:14  touchmore  阅读(210)  评论(0)    收藏  举报