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

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

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

第一种方案:

  • 使用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实现原理:

先概述一下整体原理流程

  • 创建一个Map map :key是路径  value是Activity名称

  • 使用注解方式存储

  • 直接跳转引用

 

 

第一步注解: 

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

@Target(ElementType.TYPE)



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

@Retention(RetentionPolicy.CLASS)



//声明注解BindView

public @interface BindPath{

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

    String value();

}

 

第二步注解处理器

ARouter路由实现原理(手写核心原理,实现通信一目了然)_第1张图片

ARouter路由实现原理(手写核心原理,实现通信一目了然)_第2张图片

 

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

ARouter路由实现原理(手写核心原理,实现通信一目了然)_第3张图片

 

ARouter路由实现原理(手写核心原理,实现通信一目了然)_第4张图片

 

 

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

ARouter路由实现原理(手写核心原理,实现通信一目了然)_第5张图片

 

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

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

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

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

 

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

ARouter路由实现原理(手写核心原理,实现通信一目了然)_第6张图片

 

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

ARouter路由实现原理(手写核心原理,实现通信一目了然)_第7张图片

ARouter路由实现原理(手写核心原理,实现通信一目了然)_第8张图片

 

// 找到File文件的类

ARouter路由实现原理(手写核心原理,实现通信一目了然)_第9张图片

ARouter路由实现原理(手写核心原理,实现通信一目了然)_第10张图片

 

第四步使用:

ARouter路由实现原理(手写核心原理,实现通信一目了然)_第11张图片

 

总结:

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

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

 

你可能感兴趣的:(技术分析)