EnvironmentSwitcher
EnvironmentSwitcher copied to clipboard
这个库挺好的~
这个库挺好的。我们项目里也有测试配置页,我有一些疑问,描述如下:
- 现状:有些模块会有多套测试环境,有些模块只有一套测试环境,项目里的模块(各种业务 SDK)会比较多
- 我们会提供几个快速环境切换按钮,在对应的点击事件里头切换环境。比如「点击切换一套测试」、「点击切换二套测试」、「点击切换三套测试」、「点击切换预发环境」
- 现有的功能貌似不能提供上述「快速切换环境」的功能,而是需要手动切换每个模块的环境
- 我的问题是,有没有一些好的方式,提供这种能力呢?
还有一个问题,有些 SDK 提供的是方法调用来切换环境,貌似目前 EnvironmentSwitcher
并不支持这种场景
还有一个问题,有些 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 切换环境的方法,测试环境
}
}
}
});
如果在不是整个生命周期都存在的类中添加监听,不要忘了在类销毁前移除监听事件,否则会造成内存泄漏。
快速切换功能,我有时间会考虑一下可行度和必要性的。感谢你的建议。😄
赞,第二个问题解了
我想了一下,这个快速切换可能确实优先级没那么高,需要测哪个模块,把对应模块切到对应环境就好了 😄
而且我也没想出什么好的实现的方式。
关于切换环境这个,要手写一堆 if-else
的话,还是感觉有点恶心~
纠结了好久,感觉用 addListener 的方式貌似是最好的了。。。issue 关了吧。thks