-
Notifications
You must be signed in to change notification settings - Fork 136
HighLevel
张涛(tao281.zhang) edited this page Sep 5, 2022
·
1 revision
TheRouter支持多进程,单默认只会在主进程执行初始化逻辑。如果使用了多进程,可以先关闭TheRouter
的自动初始化,然后手动在Application
的onCreate()
中执行初始化功能。
override fun attachBaseContext(base: Context) {
super.attachBaseContext(base)
theRouterUseAutoInit = false
}
override fun onCreate() {
super.onCreate()
TheRouter.init(this)
}
默认情况下,TheRouter
会在debug
模式下,将log
打印到控制台,在release
模式下不做任何输出。
如果你希望采集线上日志信息,可以自定义release
场景下的日志输出方式:
override fun onCreate() {
// 这一步建议放在Application.onCreate()之前,否则可能会在赋值之前就有部分日志已经执行了默认逻辑。
TheRouter.logCat = {tag, msg ->
// 执行上报日志的逻辑
}
super.onCreate()
}
// 判断是否为路由落地页path
TheRouter.isRouterPath(path) : Boolean
// 判断是否为 Action
TheRouter.isRouterAction(path) : Boolean
如果需要记录用户历史操作信息,用于排查错误时回放,可以直接使用历史记录导出功能:
// level共8个状态可选
val NONE // 不导出任何数据
val ACTIVITY //仅导出Activity的路由操作
val FRAGMENT //仅导出Fragment的路由操作
val PAGE // 导出 Fragment + Activity的路由操作
val ACTION // 导出 ActionManager 的操作记录
val SERVICE_PROVIDER // 导出 ServiceProvider的记录
val FLOW_TASK // 导出 FlowTaskExecutor 的历史记录
val ALL // 导出全部记录
// 8种状态可互相叠加,例如
val level = ACTIVITY + ACTION + FLOW_TASK
export(level).forEach {
info.append(it).append('\n').append('\n')
}
有一些特殊的业务场景可能必须使用Intent
对象作为参数,例如通知栏点击以后,系统只提供了Intent
参数。TheRouter 也支持这样的使用场景:
导入 Intent:
TheRouter.build(intent).withXxxxx().navigation()
导出 Intent:
// 注:导出Intent时,需要url有对应的落地页,否则Intent不会附带withXXX()的参数信息
val intent = TheRouter.build(url).withXxxxx().createIntent()
TheRouter的路由表是完全动态化的,所以允许动态加载插件路由表。 现有市面上插件化框架较多,具体可参考使用的插件化方案,当插件被加载时分别调用如下代码
// 在异步线程执行
execute {
// 初始化插件内的依赖注入
TheRouterServiceProvideInjecter.trojan();
// 初始化插件内的FlowTask
TheRouterServiceProvideInjecter.addFlowTask(context, TheRouter.digraph);
// 初始化插件内的路由表
TheRouterServiceProvideInjecter.initDefaultRouteMap();
}
TheRouter的路由表是完全动态化的,所以允许动态加载跨平台项目的路由表。
可以直接将路由表配置到/assets/RouteMap.json文件中。
如果路由表的url是具备规律的,可简单使用正则表达式一次性加载
[
{
"path": "https://kymjs.com/flutter/\\S*",
"className": "com.therouter.FlutterActivity",
"action": "",
"description": "",
"params": {
"key":"value"
}
},
......
]