EnvironmentSwitcher icon indicating copy to clipboard operation
EnvironmentSwitcher copied to clipboard

这个库挺好的~

Open wangyongf opened this issue 6 years ago • 8 comments

这个库挺好的。我们项目里也有测试配置页,我有一些疑问,描述如下:

  1. 现状:有些模块会有多套测试环境,有些模块只有一套测试环境,项目里的模块(各种业务 SDK)会比较多
  2. 我们会提供几个快速环境切换按钮,在对应的点击事件里头切换环境。比如「点击切换一套测试」、「点击切换二套测试」、「点击切换三套测试」、「点击切换预发环境」
  3. 现有的功能貌似不能提供上述「快速切换环境」的功能,而是需要手动切换每个模块的环境
  4. 我的问题是,有没有一些好的方式,提供这种能力呢?

wangyongf avatar Sep 14 '18 07:09 wangyongf

还有一个问题,有些 SDK 提供的是方法调用来切换环境,貌似目前 EnvironmentSwitcher 并不支持这种场景

wangyongf avatar Sep 14 '18 08:09 wangyongf

还有一个问题,有些 SDK 提供的是方法调用来切换环境,貌似目前 EnvironmentSwitcher 并不支持这种场景

这个问题,可以通过调用 EnvironmentSwitcher.addOnEnvironmentChangeListener 添加监听事件,然后在回调中切换 SDK 的环境。例如“直播”模块是引用的SDK,可以这样写:

EnvironmentConfig.java:

public class EnvironmentConfig {
    @Module(alias = "直播")
    private class Live {
        @Environment(url = "online", isRelease = true, alias = "正式")
        private String online;

        @Environment(url = "test", alias = "测试")
        private String test;
    }
}

YourApplication.java或其他类:

EnvironmentSwitcher.addOnEnvironmentChangeListener(new OnEnvironmentChangeListener() {
                @Override
                public void onEnvironmentChanged(ModuleBean module, EnvironmentBean oldEnvironment, EnvironmentBean newEnvironment) {
                    if (module.equals(EnvironmentSwitcher.MODULE_LIVE)) {
                        if (newEnvironment.equals(EnvironmentSwitcher.LIVE_ONLINE_ENVIRONMENT)) {
                            // 调用 SDK 切换环境的方法,正式环境
                        } else if (newEnvironment.equals(EnvironmentSwitcher.LIVE_TEST_ENVIRONMENT)) {
                            // 调用 SDK 切换环境的方法,测试环境
                        }
                    }
                }
            });

如果在不是整个生命周期都存在的类中添加监听,不要忘了在类销毁前移除监听事件,否则会造成内存泄漏。

CodeXiaoMai avatar Sep 14 '18 08:09 CodeXiaoMai

快速切换功能,我有时间会考虑一下可行度和必要性的。感谢你的建议。😄

CodeXiaoMai avatar Sep 14 '18 08:09 CodeXiaoMai

赞,第二个问题解了

wangyongf avatar Sep 14 '18 09:09 wangyongf

我想了一下,这个快速切换可能确实优先级没那么高,需要测哪个模块,把对应模块切到对应环境就好了 😄

wangyongf avatar Sep 14 '18 14:09 wangyongf

而且我也没想出什么好的实现的方式。

wangyongf avatar Sep 14 '18 14:09 wangyongf

image

关于切换环境这个,要手写一堆 if-else 的话,还是感觉有点恶心~

wangyongf avatar Sep 14 '18 15:09 wangyongf

纠结了好久,感觉用 addListener 的方式貌似是最好的了。。。issue 关了吧。thks

wangyongf avatar Sep 14 '18 18:09 wangyongf