Firestore.getInstance (): действительно ли безопасно использовать один и тот же экземпляр в любое время выполнения относительно сетевого подключения? - PullRequest
0 голосов
/ 16 февраля 2019

Firebase Firestore предоставляет метод getInstance(), который открывает сокет (только один, в любой момент времени выполнения приложения) и запускает клиент Firestore.

Я хотел бы запросить и сохранить данные,использовать или нет слушателей (чтобы получать обновления в реальном времени и т. д.).Если я вызываю getInstance, как только мне нужно запросить или сохранить, или если я сохраняю этот экземпляр в статическом классе при запуске моего приложения, а затем использую этот атрибут статического класса, как только мне нужно запросить или сохранить: эти 2 случаятехнически одинаковы.Потому что Google использует шаблон синглтона (getInstance()).

Но я что-то упустил?Действительно ли безопасно хранить этот экземпляр как атрибут статического класса и использовать его, когда мне это нужно?И действительно ли безопасно звонить getInstance всякий раз, когда мне это нужно? Чтобы быть более точным: между 2 вызовами getInstance() (или между 2 обращениями к атрибуту статического класса), т.е.: между 2 точками времени выполнения, существует ли риск потери сетевого подключения, сокетное соединение, соединение с прослушивателями в реальном времени (снимки) и т. д.?

Если да: как решить эти проблемы?

1 Ответ

0 голосов
/ 16 февраля 2019

Я хотел бы запрашивать и хранить данные, используя или не слушатели (для получения обновлений в реальном времени и т. Д.)

Нет способа получить данные или даже получить обновления в реальном времени безиспользуя слушателя.Все в Cloud Firestore касается слушателей.

, если я сохраню этот экземпляр в статическом классе при запуске моего приложения, а затем использую этот атрибут статического класса, как только мне потребуется запросить или сохранить

Не размещайте классы контекста Android в статических полях.Статическая ссылка на FirebaseFirestore с контекстным полем, указывающим на контекст, приведет к утечке памяти.

Статическое поле утечет контексты.Нестатические внутренние классы имеют неявную ссылку на свой внешний класс.Если этот внешний класс является, например, Fragment или Activity, то эта ссылка означает, что долго выполняющийся обработчик / загрузчик / задача будет содержать ссылку на операцию, которая не позволяет собирать мусор.

Таким образом, вместосохраняя его как статическую переменную, вызовите getInstance() всякий раз, когда это необходимо.Или более удобным решением было бы использование внедрения зависимостей. Кинжал может помочь вам решить эту проблему.

И действительно ли безопасно вызывать getInstance всякий раз, когда мне это нужно?

Да, это так.

между 2 обращениями к атрибуту статического класса), т. Е. Между 2 точками времени выполнения, существует ли риск потери сетевого подключения, сокетного соединения, соединения прослушивателей (снимков) в реальном времени и т. Д.?

См. Объяснение выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...