【转】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
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

浙公网安备 33010602011771号