动态代理+注解的应用 ---- 使用类似Retrofit方式显式跳转Activity

说起跳转Activity, 那肯定离不开 Intent, 那么我们平时怎么书写Activity显示跳转呢?
我们可能会这么写:


    Intent intent = new Intent();
    intent.putExtra("NAME", "张三");
    intent.putExtra("AGE", 18);
    intent.putExtra("PHONE", 123456);
    intent.putExtra("MONEY", 0.1);
    startActivity(intent);

或者优化一下:


	startActivity(
		new Intent()
            .putExtra("NAME", "张三")
            .putExtra("AGE", 18)
            .putExtra("PHONE", 123456)
            .putExtra("MONEY", 0.1)
	);

或者再封装一下:


	TUtils.startActivityForResult(contextWrap,
        new TIntentWap(IntentUtils.getPickMultipleIntent(contextWrap, limit), TConstant.RC_PICK_MULTIPLE));

但实际上IntentUtils内部依然需要这样写:


    public static Intent getPickMultipleIntent(TContextWrap contextWrap, int limit) {
        Intent intent = new Intent(contextWrap.getActivity(), AlbumSelectActivity.class);
        intent.putExtra(Constants.INTENT_EXTRA_LIMIT, limit > 0 ? limit : 1);
        return intent;
    }

使用IntentUtils封装一下固然好, 但依旧会写很多重复的 new Intent() 的代码. 在 AndroidStudio 中全局搜索 new Intent 如下图, 会发现项目中有很多重复的 new Intent:

以及很多重复的 putExtra :

那么能不能使用一种方法, 类似Retrofit2 的方式, 在一个接口中定义方法并使用注解配置一下, 不需要写接口的实现类就能实现Activity的跳转? 看了Retrofit2的源码后发现底层是利用动态代理, 于是我开始造轮子, 花了一天时间终于实现了效果:

如上图是定义的接口, Activity的跳转可以定义在接口中, 其中每一个方法必须要有一个 Context 对象, 方法需要使用 @Intent 注解, 其中 target 是要跳转的目标 Activity , intentType 是 Intent 的类型(MemoryIntent 是使用Map保存变量的方式来传递参数, Intent 是使用系统的Intent).

使用的时候:

JumpFactory 是Demo中的一个类:

JumpUtilJumpLib 即我造的轮子中的类, 只需要调用 create() 方法, 不需要实现 Jump 接口, 就可以进行Activity的跳转并能够传递参数.

那么 A 通过这种方式跳转到 BActivity, B 要怎么获取这些参数呢? JumpLib 库提供了这样的方式来解析 Intent 中的参数, 如下图所示, 我们首先定义方法 parseIntent(方法名随意取), 需要给方法加上 @IntentParser 的注解, 其中 intentType 是你跳转的传参方式, id 即 调用 JumpUtil.parseIntent() 传入的id, @Params 注解中的值即 使用 Jump 接口方法中相同注解的值.

如上图, 在B Activity 中的onCreate() 方法调用 JumpUtil.parseIntent() 方法, 就会执行被@IntentParser 所标注的对应ID的方法, 在该方法中就是 A要传递给B的参数. 感兴趣的可以前往GitHub 查看Demo GitHub地址:https://github.com/EshelGuo/JumpDemo

使用方法:
  • 在 app 下的build.gradle 下添加如下依赖:

      implementation 'com.eshel.lib:jump:2.2.0'
    
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值