enableNetwork()
довольно умный способ сделать это. Он не был предназначен для этого использования, но он работает.
Причина в том, что enableNetwork()
предназначен для идемпотентности. Вы можете звонить так часто, как хотите, и если сеть уже включена, она ничего не делает. (disableNetwork()
ведет себя так же.)
Другая часть того, почему это работает, заключается в том, что Firestore не запускает свою внутреннюю рабочую очередь, пока вы что-то не сделаете с ним. Мы делаем это по ряду причин, но главным образом это позволяет вам позвонить setFirestoreSettings()
, прежде чем мы что-либо сделаем.
Ваше решение работает, потому что enableNetwork()
- это вызов, который запускает этот внутренний запуск, но в конечном итоге ничего не делает, потому что сеть уже включена.
Обратите внимание, что Firestore на самом деле не создает сетевое соединение, если у него нет ничего общего, поэтому запускать его по-своему относительно дешево, и если ничего не делать, он проверит наличие ожидающих записей и ничего не делать.
Вы могли бы улучшить это, если бы существовал API, позволяющий узнать, закончили ли мы синхронизацию ожидающих записей. Мы развили эту идею, но не определились с API, который нам нужен, и не смогли расставить приоритеты по сравнению с другими работами. Если это было очень важно для вас, обратите внимание, что источник открыт на https://github.com/firebase/firebase-android-sdk/, и мы очень дружелюбны: -).