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-CleanArchitecture Navigator.java

What is an efficient way to implement a singleton pattern in Java?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 单例模式(SingletonPattern)一般被认为是最简单、最易理解的设计模式,也因为它的简洁易懂,是项目中最...
    成热了阅读 4,291评论 4 34
  • Activity的启动模式 在实际项目中需要根据特定的需求为每一个Activity指定恰当的启动模式。 启动模式一...
    寒桥阅读 988评论 0 0
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,117评论 25 708
  • 读古人的书,读来读去还是觉得《西游记》最有灵性。 早期的孙悟空是最有造反劲头的人物,严格来说他还不是一个人...
    死在水里的鱼阅读 232评论 0 2
  • 你开始时包容着她 让着她 哄着她 努力让她高兴起来 后来你累了 你不管她了 你放她一个人难过 等着她好了以后再跑来...
    如果不曾遇见伱阅读 236评论 0 0