Activity跳转最佳实践

Activity跳转最佳实践

学习Android-CleanArchitecture时, 注意到它用了一个Navigator类统一管理Activity跳转, 统一管理的好处相信不用我多说, 让我们一起来学习一个.

传统写法

跳转不需要参数时:

Intent intent = new Intent(this, SecondActivity.class);
startActivity(intent);

跳转需要参数那就是

Intent intent = new Intent(this, SecondActivity.class);
intent.putExtra("key","someValue");
startActivity(intent);

这样写可能会发生一不小心写错了key, 或者传递的数据需要修改时, 改动的地方较多. 而统一使用一个类控制, 会干净舒服很多.

干净的写法

在SecondActivity中定义静态方法

public static Intent getCallingIntent(Context context){
    Intent callingIntent = new Intent(context, SecondActivity.class);
    return callingIntent;
}

创建Navigator类, 控制跳转

public enum Navigator {

    INSTANCE;
    
    public void navigateToSecond(Context context){
        if(context != null){
            Intent callingIntent = SecondActivity.getCallingIntent(context);
            context.startActivity(callingIntent);
        }
    }
}

Tips: 此处使用枚举实现单例, 枚举实现单例是单例的最佳实践, 参见What is an efficient way to
implement a singleton pattern in Java?, 或者看Effective Java第三条

调用方式:

Navigator.INSTANCE.navigateToSecond(this);

同理, 如果是需要传值, SecondActivity中:

private static String EXTRA_KEY = "key";

public static Intent getCallingIntent(Context context, String value){
    Intent callingIntent = new Intent(context, SecondActivity.class);
    callingIntent.putExtra(EXTRA_KEY, value);
    return callingIntent;
}

将extra的key与需要该值的Activity写在一起, 而不是与跳转逻辑写在一起, 减少出错的可能.

Navigator改为

public enum Navigator {
    INSTANCE;
    public void navigateToSecond(Context context, String value){
        if(context != null){
            Intent callingIntent = SecondActivity.getCallingIntent(context, value);
            context.startActivity(callingIntent);
        }
    }
}

总结
这样的写法将Activity跳转逻辑抽取了出来, 减少了人为犯错的可能, 还是值得大家在项目中实际使用的.

喜欢的话请帮忙转发一下能让更多有需要的人看到吧,有些技术上的问题大家可以多探讨一下。

在这里插入图片描述
在这里插入图片描述

以上Android资料以及更多Android相关资料及面试经验可在QQ群里获取:936903570。有加群的朋友请记得备注上CSDN,谢谢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值