组件化通信,跳转有两种实现方案:
核心:编译时生成文件,运行时执行文件
第一种方案:
-
使用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<String, String> map :key是路径 value是Activity名称
-
使用注解方式存储
-
直接跳转引用
第一步注解:
//声明作用域 类(作用域方法、还是变量)
@Target(ElementType.TYPE)
//声明我们定义的注解声明周期 java(源代码) -- class(编译时) --- run(运行时)
@Retention(RetentionPolicy.CLASS)
//声明注解BindView
public @interface BindPath{
// 注解参数类型(BindPath(login/login))
String value();
}
第二步注解处理器
同ButterKnife一样步骤,不同的是处理process方法处理:
这是通过file写出来得类,可以看到最终是保存我们自己得ARouter中了
总结:(注解器所作的事情)
-
通过google的库,获取这个注解所有的类节点。 (拿到类节点等于就是拿到所有的类信息)
-
用map把获取到的 路径名称为key, 类名为Vulue存起来
-
然后通过文件,把他都存在ARoute对应map中写在build文件加下面。
第三步ARouter调用 file文件的putActivity方法:
com.netease.util是生成得包名, 执行File文件的putActivity方法
// 找到File文件的类
第四步使用:
总结:
-
通过注解和注解器方式,获取所有@ARouterPath注解的所有类信息,然后用Map存储保存起来,写在build文件下的文件内
-
跳转的时候直接用存储的Map,根据路径取value跳转