类图关系变化(跳转到购物车页面为例):
优化前:

优化后:

BaseRedirectActivity 中会对uri携带的公共参数(need_login、redirect)进行处理,这些处理属于所有协议跳转都必须做的,而且与dispatchFrom的跳转分发在时间上先后顺序不是固定的,因此可以将二者顺序调换。
即,优化前:在DeeplinkActivity中先通过dispatchFrom跳转到二级路由(如:RedirectShoppingCartActivity),再在二级路由的基类BaseRedirectActivity对公共参数(need_login、redirect)进行处理,在二级路由的onCreate中对私有参数进行处理(如uri中携带的poi、sku、type等业务参数),再将处理好的参数传入目标Activity(如:ShoppingCartActivity)。
优化后:在DeeplinkActivity中先通过基类BaseRedirectActivity对公共参数need_login、redirect)进行处理,再在redirectWithUri中进行dispatchFrom,同时在dispatchFrom中先对uri中的私有参数进行处理,之后再跳转到Activity(如:ShoppingCartActivity)。
进一步优化(代码尚未提交,需要更多时间自测):
优化原因: 1. 上述优化在dispatchFrom中对uri中的私有参数进行了处理,而在原开源框架中,是将uri私有参数在了bundle中,通过Intent传入了目标Activity(在目标Activity中对私有参数进行处理),这样做到了 更好的解耦
2.原框架通过对bundle传入特殊参数的方式,对跳转是否成功进行了监听,可以更好的兼容未知的需求
优化方案:dispatchFrom中将私有参数放入bundle并传入目标Activity,在目标Activity中获取bundle进行参数处理。(tips: 有些目标Activity不能直接通过startActivity进行跳转(如付款码界面),仍然采用之前的优化方案)。
网友评论