“dynamic”, // Group, 尽量保持和 path 的第一段相同
0, // 优先级,暂未使用
0 // Extra,用于给页面打标
)
);
}
});
// 构建标准的路由请求,并指定分组
ARouter.getInstance().build(“/home/main”, “ap”).navigation();
// 构建标准的路由请求,通过Uri直接解析
Uri uri;
ARouter.getInstance().build(uri).navigation();
// 构建标准的路由请求,startActivityForResult
// navigation的第一个参数必须是Activity,第二个参数则是RequestCode
ARouter.getInstance().build(“/home/main”, “ap”).navigation(this, 5);
// 指定Flag
ARouter.getInstance()
.build(“/home/main”)
.withFlags();
.navigation();
// 获取Fragment
Fragment fragment = (Fragment) ARouter.getInstance().build(“/test/fragment”).navigation();
// 对象传递
ARouter.getInstance()
.withObject(“key”, new TestObj(“Jack”, “Rose”))
.navigation();
// 使用绿色通道(跳过所有的拦截器)
ARouter.getInstance().build(“/home/main”).greenChannel().navigation();
- ARouter.init 时,通过获取
/data/app/包名/base.apk
来筛选出ARouter生成的类,如下图。
- 对于Activity类型,跳转
ARouter.getInstance().build("/login/login").navigation();
,最终执行的是,如下:
**
-
Start activity
-
@see ActivityCompat
*/
private void startActivity(int requestCode, Context currentContext, Intent intent, Postcard postcard, NavigationCallback callback) {
if (requestCode >= 0) { // Need start for result
if (currentContext instanceof Activity) {//启动context 为Activity
ActivityCompat.startActivityForResult((Activity) currentContext, intent, requestCode, postcard.getOptionsBundle());
} else {
// 启动context 为Application 时,不支持requestCode
logger.warning(Consts.TAG, “Must use [navigation(activity, …)] to support [startActivityForResult]”);
}
} else {//启动context 为Application
ActivityCompat.startActivity(currentContext, intent, postcard.getOptionsBundle());
}
if ((-1 != postcard.getEnterAnim() && -1 != postcard.getExitAnim()) && currentContext instanceof Activity) { // Old version.
((Activity) currentContext).overridePendingTransition(postcard.getEnterAnim(), postcard.getExitAnim());
}
if (null != callback) { // Navigation over.
callback.onArrival(postcard);
}
}
- 两个无关的module 如何跳转的呢?我们发现最终执行startActivity时,所用的context为Application,思路是这样的,子module启动另外无关子module时,将执行权,交还给主进程/主程序去处理
- 打开生成路由文档,AROUTER_GENERATE_DOC=“enable”,会生成arouter-map-of-xx.json和3个java文件
// 更新 build.gradle, 添加参数 AROUTER_GENERATE_DOC = enable
// 生成的文档路径 : build/generated/ap_generated_sources/(debug or release)/com/alibaba/android/arouter/docs/arouter-map-of-${moduleName}.json
android {
defaultConfig {
…
javaCompileOptions {
annotationProcessorOptions {
arguments = [AROUTER_MODULE_NAME: project.getName(), AROUTER_GENERATE_DOC: “enable”]
}
}
}
}
//ARouter映射关系如何生成?Generated出三个文件
//ARouter G r o u p Group Grouplogin
//ARouter P r o v i d e r s Providers Provid