Android多模块路由,Android 路由模块分析笔记
路由映射映射关系通过 Router#map 方法添加,Mapping 类记录了某个 Page 的映射路径初始化,会在第一使用的时候完成,使用 @Module 后的每个模块内会生成一个 RouterMapping_xxx 的类来初始化当前模块的路由表,主模块还需要使用 @Modules 声明,并会生成一个 RouterInit 类以实现所有模块的主模块初始化的时候,调用各个模块初始化自己的路由表//
路由映射
映射关系通过 Router#map 方法添加,Mapping 类记录了某个 Page 的映射路径
初始化,会在第一使用的时候完成,使用 @Module 后的每个模块内会生成一个 RouterMapping_xxx 的类来初始化当前模块的路由表,主模块还需要使用 @Modules 声明,并会生成一个 RouterInit 类以实现所有模块的
主模块初始化的时候,调用各个模块初始化自己的路由表
//APT 生成
public final class RouterInit {
public static final void init() {
RouterMapping_app.map();
RouterMapping_sdk.map();
}
}
app 模块的路由表初始化
//APT 生成
public final class RouterMapping_app {
public static final void map() {
//路由表初始化
//...
//@Router(value = "home/:homeName")
com.github.mzule.activityrouter.router.Routers.map("home/:homeName", HomeActivity.class, null, extraTypes);
//@Router("with_host")
com.github.mzule.activityrouter.router.Routers.map("with_host", HostActivity.class, null, extraTypes);
//@Router(value = {"http://mzule.com/main", "main", "home"})
com.github.mzule.activityrouter.router.Routers.map("http://mzule.com/main", MainActivity.class, null, extraTypes);
com.github.mzule.activityrouter.router.Routers.map("main", MainActivity.class, null, extraTypes);
com.github.mzule.activityrouter.router.Routers.map("home", MainActivity.class, null, extraTypes);
//...
}
}
启动页面
最后通过 Routers#doOpen 来启动一个 Activity
private static boolean doOpen(Context context, Uri uri, int requestCode) {
initIfNeed();
Path path = Path.create(uri);
for (Mapping mapping : mappings) {
if (mapping.match(path)) {
if (mapping.getActivity() == null) {
mapping.getMethod().invoke(context, mapping.parseExtras(uri));
return true;
}
Intent intent = new Intent(context, mapping.getActivity());
//...
if (requestCode >= 0) {
//...
} else {
context.startActivity(intent);
}
return true;
}
}
return false;
}
参数传递
可以通过 url 来传递一些基本类型的参数,如果需要传递对象类型的数据或者添加 launchFlag,只能通过 Router#resolve 方法来返回一个 Intent对象,这无疑打破的代码的简洁和优雅性,可以考虑构造一个新的对象来负责跳转和跳转前额外参数的添加职责(后面说的 Rabbit 就更合理且优雅)
具体流程
ActivityRouter启动页面流程.png
类图
ActivityRouter类图
更多推荐
所有评论(0)