WMRouter中,加载注解配置的页面、加载Service涉及到资源文件的读取解析、反射获取Class和创建实例,存在一定的性能消耗。为避免初始化时间过长影响App启动速度,一些组件会使用懒加载机制进行初始化(具体实现可参考):

    • 也可以在App启动时在后台线程提前初始化,使用时会先等待初始化完成。

    因此为了提高App运行性能,初始化时除了在主线程调用init,还可以在后台线程调用lazyInit()提前启动一些懒加载的初始化操作,示例如下:

    使用注解进行配置,注解往往分散在一个工程的不同代码文件甚至不同的工程中。如果没有很好的文档或代码约束,很容易出现多个页面配置了相同的URI或Service导致冲突的问题。

    因此WMRouter在注解生成阶段、APK打包阶段,使用AnnotationProcessor和Gradle插件进行检查,检查到配置冲突或错误会抛异常,中断编译。

    Debugger建议配置使用DefaultLogger:

    • 测试环境下开启Debug模式,fatal错误会抛出异常及时暴漏问题;

    代码如下:

    跳转来源可以用于实现Exported控制、埋点统计、特殊业务逻辑等。其中Exported控制类似Android中Activity原生的Exported属性,默认为false,表示不允许来自外部的跳转,从而避免一些安全问题或功能异常。外部跳转由UriProxyActivity统一接收,然后调用WMRouter跳转并设置from为,之后UriHandler通过跳转来源和页面的Exported配置即可判断是否允许跳转。

    通过UriSourceTools.setDisableExportedControl可以开启或关闭Exported控制。

    WMRouter支持配置全局和局部降级策略。

    使用设置全局跳转完成的监听,可以在其中跳转失败时执行全局降级逻辑。在DefaultRootUriHandler中默认配置的GlobalOnCompleteListener会在跳转失败时弹Toast提示用户。

    根据实际情况,可以自定义具有各种功能的UriHandler和UriInterceptor,前面已经提到,不再赘述。一般使用DefaultRootHandler和DefaultUriRequest,以及少量自定义的UriHandler已经可以满足绝大多数需求。如果有更复杂的场景需要,WMRouter中的核心组件可以通过继承、组合等方式实现更灵活的定制。例如自定义RootUriHandler示例如下: