之前设计框架、面试、调研等等的时候,一直觉得ARouter这种完全靠字符串 + 野性Builder的模式太随性。后面YY出来两个可行的方案:
- 为每个页面/Uri生成一个Builder类,用专有Builder进行编译期校验。现存的是https://github.com/joyrun/ActivityRouter
- 为每个页面/Uri构造一个interface方法,用Retrofit的套路做跳转。现有的有两个,这里看一下Meepo
因为都是运行时的简单转换,所以整体结构非常简单。整体流程就是:
- 调用proxy
- 通过Parser解析interface
- 通过CallAdapter执行真正操作
而这两个关键步骤都可以通过实现对应接口的方式进行定制,设计非常合理。核心数据流转是CallMethod,包含了桥接interface和Intent的所有需要参数。