android arouter 原理,ARouter路由实现原理(手写核心原理,实现通信一目了然)

本文详细介绍了组件化通信的两种常见实现方式:Intent隐式跳转和ARouter。首先,讲解了Intent如何通过设置Action、Category和Flags实现清空任务栈并启动新任务。接着,深入探讨了ARouter的工作原理,包括注解的声明、注解处理器的处理以及运行时的调用流程。总结了ARouter如何通过注解和注解处理器在编译时生成文件,运行时根据路径查找目标Activity进行跳转。
摘要由CSDN通过智能技术生成

组件化通信,跳转有两种实现方案:

核心:编译时生成文件,运行时执行文件

第一种方案:

使用Intent 隐士跳转方式。

/**

*  隐士跳转首页 清空现有栈,创建新栈

*/

public static void newTaskMainActivity(Activity activity){

Intent intent = new Intent();

intent.setAction("com.byxgame.fusioncocos.main.MainActivity");

intent.addCategory("android.intent.category.DEFAULT");

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);

activity.startActivity(intent);

}

第二种方案: 使用ARouter实现

ARouter实现原理:

先概述一下整体原理流程

创建一个Mapmap :key是路径  value是Activity名称

使用注解方式存储

直接跳转引用

第一步注解:

//声明作用域 类(作用域方法、还是变量)

@Target(ElementType.TYPE)

//声明我们定义的注解声明周期  java(源代码)  -- class(编译时)  --- run(运行时)

@Retention(RetentionPolicy.CLASS)

//声明注解BindView

public @interface BindPath{

// 注解参数类型(BindPath(login/login))

String value();

}

第二步注解处理器

211a87c5c70622961fade10c748c14b4.png

b1085a2de38472872f45ea7582956d67.png

同ButterKnife一样步骤,不同的是处理process方法处理:

fb6b4e2913f85b768cc5d39d3779e449.png

7fda50f4e7e52f65a53fc51c3927f5db.png

这是通过file写出来得类,可以看到最终是保存我们自己得ARouter中了

1900493ab1f9d26087eb01d1bb85931d.png

总结:(注解器所作的事情)

通过google的库,获取这个注解所有的类节点。 (拿到类节点等于就是拿到所有的类信息)

用map把获取到的 路径名称为key, 类名为Vulue存起来

然后通过文件,把他都存在ARoute对应map中写在build文件加下面。

第三步ARouter调用 file文件的putActivity方法:

b1498fa4c969cbaec66b3b6dc1be6c97.png

com.netease.util是生成得包名, 执行File文件的putActivity方法

a5e4a0eb16d34d5163610d92c21703aa.png

acaf0389e6ad2286e77d280bc42290c7.png

// 找到File文件的类

861cb092406a70f537746f82786d1026.png

4d46fdb50378e393f901de9b4c09a133.png

c00cc010c822fb50ee277fc47a8f4ad0.png

第四步使用:

3326abc8f011173ab433132a3aaa5c25.png

总结:

通过注解和注解器方式,获取所有@ARouterPath注解的所有类信息,然后用Map存储保存起来,写在build文件下的文件内

跳转的时候直接用存储的Map,根据路径取value跳转

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值