Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

这个库挺好的~ #6

Open
wangyongf opened this issue Sep 14, 2018 · 8 comments
Open

这个库挺好的~ #6

wangyongf opened this issue Sep 14, 2018 · 8 comments

Comments

@wangyongf
Copy link

wangyongf commented Sep 14, 2018

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

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

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

@CodeXiaoMai
Copy link
Owner

还有一个问题,有些 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
Copy link
Owner

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

@wangyongf
Copy link
Author

赞,第二个问题解了

@wangyongf
Copy link
Author

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

@wangyongf
Copy link
Author

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

@wangyongf
Copy link
Author

image

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

@wangyongf
Copy link
Author

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants