Android路由框架开发入门教程

.go();

此处可以使用各种扩展方法,比如传入转场动画等,就是对Android Api的封装,此处不赘述。

Router实现细节

Router可以使用两种方式进行跳转

  • 使用反射,通过注解拿到对应的class然后进行跳转
  • 使用APT,在编译时生成map,从map中查到对应的class进行跳转

使用反射的弊端是,反射是及其消耗性能的,Android官方推荐的是尽可能避免反射,使用APT生成代码的方式可以最大化的减少性能损耗,避免每次跳转都用反射来做。所以我们使用APT来做。

这是一个删掉了无用细节的APT类。

@AutoService(Processor.class)
@SupportedSourceVersion(SourceVersion.RELEASE_7)
public class MainProcess extends AbstractProcessor {

private Filer mFiler;

@Override
public synchronized void init(ProcessingEnvironment processingEnvironment) {
super.init(processingEnvironment);
mFiler = processingEnvironment.getFiler();
}

@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnvironment) {
//…
Set<? extends Element> elements = roundEnvironment.getElementsAnnotatedWith(MobRouterPath.class);

for (Element element : elements) {
MobRouterPath routerPath = element.getAnnotation(MobRouterPath.class);
for (String key : routerPath.value()) {
//此处进行map输入
}
}
//…
javaFile.writeTo(mFiler); //把生成好的文件保存
return true;
}

@Override
public Set getSupportedAnnotationTypes() {
LinkedHashSet linkedHashSet = new LinkedHashSet<>();
linkedHashSet.add(MobRouterPath.class.getCanonicalName());
return linkedHashSet;
}
}

我们可以看到,在编译期间拿到了注解,然后通过注解,使用Javapoet来进行java file 生成,这里产生的对应类为

public class MobRouterPathHolder {
private static Map sRouterMap = new HashMap<String,Class>();;

public static Map getRouterMap() {
sRouterMap.put(“image_activity”, ImageActivity.class);
sRouterMap.put(“share_activity”, ShareActivity.class);
return sRouterMap;
}
}

我们可以生成一个静态方法,然后拿到Activity和key的对应的map,从map中读取对应的class进行跳转。

那么如何获取到Map呢?
Class tmp = Class.forName(“com.bytedance.mobrouter.MobRouterPathHolder”);
sRouterMap = (Map<String, Class>) tmp.getMethod(“getRouterMap”, new Class[]{}).invoke(tmp, new Object[]{});
这里使用反射获取到map,这句最好在Application的onCreate中进行,防止还没有注册就进行跳转。此处使用反射一次拿到map之后就不用再使用任何反射了,不会有性能问题。有了map,就可以根据map进行跳转了。

扩展

  1. 可以通过对map的修改对跳转进行修改,而且不会有任何兼容性问题
  2. 在众多的插件化框架中,动态加载APK并不会走编译流程,那么可以在下发的APK中加入一个路由表,然后加入到全局的路由map中,就可以实现对下发的插件进行路由而没有任何兼容性问题。
    MobRouter是一种思路,具体的更多的业务可以自行发挥,进行更多的开发。

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助

因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
s.csdn.net/topics/618165277)

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 9
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值