Я пытаюсь сделать выборку Remote Config для загрузки его в первый раз на моем SplashScreen.
Во время загрузки моего заставки я получаю данные с помощью пульта дистанционного управления.Конфигурация синглтона один раз, а затем я просто получаю доступ к значению внутри каждого класса, в котором мне нужно значение этого Remote Config
Я делаю это, чтобы пользователи не могли видеть изменения, пока они находятся в Activity,это из-за рождественской темы, которую я создаю, чтобы показать пользовательский макет с удаленной конфигурацией
Все работает нормально (иногда), и тема меняется во всем приложении с этим синглтоном, но естьиногда время асинхронной выборки, которое должно пройти, возвращается после загрузки моего SplashScreen, поэтому я могу видеть, что тема изменилась в остальных моих действиях, но не в основной после SplashScreen
Это мой синглтон
public class PruebaSingleton {
private boolean christmasEvent;
private FirebaseRemoteConfig mFirebaseRemoteConfig;
private static volatile PruebaSingleton _instance;
private PruebaSingleton(){
fetchRemoteConfig();
}
public synchronized static PruebaSingleton getInstance(){
if(_instance == null){
synchronized (PruebaSingleton.class) {
if (_instance == null) _instance = new PruebaSingleton();
}
}
return _instance;
}
private void fetchRemoteConfig() {
mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance();
mFirebaseRemoteConfig.setConfigSettings(
new FirebaseRemoteConfigSettings.Builder().setDeveloperModeEnabled(BuildConfig.DEBUG)
.build());
mFirebaseRemoteConfig.fetch(0).addOnCompleteListener(task -> {
if (task.isSuccessful()) {
mFirebaseRemoteConfig.activateFetched();
}
christmasEvent = mFirebaseRemoteConfig.getBoolean("christmas_ottaa_mode");
}).addOnFailureListener(e -> {
});
}
public boolean isChristmasModeEnabled(){
return christmasEvent;
}
Теперь, после этого, я просто один раз создаю экземпляр этого синглтона, чтобы получить данные удаленной конфигурации.и воздействует на все мое приложение.
На моем SplashScreen onCreate()
PruebaSingleton.getInstance();
И тогда я просто получаю логическое значение во всех моих действиях таким образом
PruebaSingleton.getInstance().isChristmasModeEnabled();
Изатем я могу сменить тему.
Дело в том, что иногда (не обычно, но это происходило примерно 2 раза за 10 запусков) выборка из синглтона внутри моего SplashScreen получает данные после заставкиотправляет на первое задание, это приводит к тому, что мое первое задание не отображает тему, но мои другие задания отображают.
У меня вопрос
Есть ли способ обработать выборку, пока я в моемЗаставка ?
Мысль о создании интерфейса немного замедлит мой SplashScreen, пока вся работа по извлечению не будет выполнена в классе singleton, но я также не хочу показывать всплывающее диалоговое окно в первом действии, чтобы сообщить пользователям, которые ожидаютдля извлечения.
Это больше проблема производительности, потому что пока выборка завершена, заставка должна быстро перейти к первому действию и не ждать больше времени, чтобы получить данные, потому что если это произойдет, я будуснизить производительность приложения, пытающегося загрузить рождественскую тему.
Кроме того, первый выбор должен работать правильно, второй запуск загрузит данные, которые были получены в первый раз, а затем будет ждать 12 часов, чтобы запросить новые данные,поэтому мне нужно, чтобы в первый раз все действия со значением выборки были в значении true.