美文网首页
猫眼自动注入化的跳转参数解析方式

猫眼自动注入化的跳转参数解析方式

作者: 陈文超happylion | 来源:发表于2018-01-30 16:13 被阅读295次

猫眼的页面跳转参数解析旧方式

onCreate()中需要写繁琐的重复代码

之前,我们需要在activity的onCreate()中,把页面跳转传递的参数,解析出来。外界传递来的参数可能在intent的bundle里面,也有可能在intent的uri中(隐式跳转)。
因此为了得到跳转的参数,我们需要类似这么做:
int value = 0;
if(intent!=null){
value = intent.getIntExtra(name,defaultValue);
}
if(value == 0 && intent.getData() != null){
//从uri中获取
Uri uri = intent.getData();
try {
intExtra = Integer.parseInt(uri.getQueryParameter(paramName));
} catch (Exception e) {
//解析错误,即参数不合法
//handleUnValidParam() 比如降级处理,跳转到一个兜底页面
}
}

解析每一个参数都要做一次上面的流程,很繁琐。维护也有一些成本。

主参数的处理

有这么一种场景,我们一个页面需要一个movieId作为主参数,如果页面跳转没有这个参数,那么需要降级处理,跳转到兜底页面,或者主页面。如果传来的参数中有主参数,但是没有其他非必须参数。那么不需要降级处理,其他非必须参数给默认值就可以了,页面正常跳转。
这样一种场景,之前在猫眼并没有做。

猫眼的页面跳转参数解析新方式:自动注入

只需要在Activity中使用CheckAndInjectJumpParam 注解 参数对应的成员变量即可,在Activity onCreate()执行之前,会自动把跳转参数注入进来。不论跳转的形式是普通显示跳转还是隐式跳转。如果参数不合法,那么会自动进行降级处理:跳转到兜底页面;如果主参数不存在,也会进行降级处理。

 public  class xxxActivity{

    @CheckAndInjectJumpParam(keyParam = true)
    private long id;
    @CheckAndInjectJumpParam
    private String nm;
    @CheckAndInjectJumpParam
    private String enName;
    @CheckAndInjectJumpParam
    private boolean needRate;
   
    protect void onCreate(Bundle bundle){
       super.onCreate(bundle);
       ...//直接使用id、enName..
    }
}

不需要在onCreate()中手写 参数的解析,或者进行解析失败的兜底处理工作。

大致原理

使用aop在Activity onCreate()执行之前,进行页面跳转参数的解析工作。如果解析失败/或不含有主参数,那么会进行异常处理(目前是finish掉当前页面,然后启动兜底页面)。注意,finish掉当前页面时,需要调用当前页面activty的系统onCreate()方法,不然会报SuperNotCalledException。

因为这些工作是在onCreate()方法执行之前完成的,所以出现异常时,不会进行任何业务代码的生命周期的回调(除onDestroy)。所以也就不会产生页面含有的业务fragment等。

todo

需要继续完成的工作是:把activity onCreate()中之前旧的参数解析方式换成新的自动注入化的跳转参数解析方式。

具体代码因为涉及到公司的要求,就不外放了,其实不难,使用aspectj 的Around拦截一下onCreate()就好了。阿里的Arouter做的功能更丰富一些,大家可以参考一下。

相关文章

  • 猫眼自动注入化的跳转参数解析方式

    猫眼的页面跳转参数解析旧方式 onCreate()中需要写繁琐的重复代码 之前,我们需要在activity的onC...

  • Aroute源码分析

    Aroute优点: 1 :支持解析标准得URl进行跳转,并且自动注入参数到目标页面。2 : 支持多模块工程使用...

  • ARouter简介

    1.1 功能介绍 支持直接解析标准URL进行跳转,并自动注入参数到目标页面中 支持多模块工程使用 支持添加多个拦截...

  • C#页面跳转的几种方式

    C#页面跳转的几种方式 方式一 html中不带参数跳转:带参数跳转: 方式二 js控制页面跳转带参数和不带参数 方...

  • b05-2 Spring依赖注入(精通SPring 4.x)

    本篇内容: 1、属性注入 2、构造方法注入(注入方式:参数名称,参数类型,参数索引,反射注入) 3、循环注入 4、...

  • 2018-04-26

    中文版 工作 - 接口自动化接昨天的工作。将解析好的参数对象补全参数信息写入数据库。(每次解析后参数入库走全删全增...

  • python小功能-递归解析Json

    目的:解析Json格式的接口参数用途:用于接口自动化测试,避免手工录入接口参数 1 Json格式的接口参数会有多种...

  • 通过Testng+Jenkins实现Case参数化

    在做自动化测试中,参数化非常常见。例如你希望你的自动化脚本能在不同的环境中执行。 当然参数化的方式非常多,例如可以...

  • 19 Web自动化测试 -- 参数化

    在做自动化测试中,参数化非常常见。例如你希望你的自动化脚本能在不同的环境中执行。 当然参数化的方式非常多,例如可以...

  • 测试友好:C# WPF程序的面向测试的设计方式

    基于Singleton的设计 vs 基于MEF/Unity的依赖注入设计 依赖注入方式使得自动化测试变得有些麻烦。...

网友评论

      本文标题:猫眼自动注入化的跳转参数解析方式

      本文链接:https://www.haomeiwen.com/subject/wruczxtx.html