Безопасно ли инициализировать Firebase в фоновом потоке в Android? На что обратить внимание? - PullRequest
0 голосов
/ 29 августа 2018

В моей настройке Firebase требует ~ 250 мс для инициации (измеряется на Nexus 5 как разница в «времени до первого отображения» с FirebaseInitProvider / CrashlyticsInitProvider и без него при холодном запуске). Это проблема, потому что без Firebase моему приложению требуется всего 350 мс для холодного запуска, а Firebase удваивает его.

Я рассматриваю возможность отключения стандартных FirebaseInitProvider и CrashlyticsInitProvider, которые запускаются в главном потоке перед запуском приложения, и выполняют инициализацию вручную в фоновом потоке (например, начиная с Application.onCreate()).

Q: безопасно ли вызывать FirebaseApp.initializeApp() в фоновом потоке? И если да, то на что мне следует обращать внимание? Я знаю, что если нужно, например, getUser() пока Firebase все еще запускается в фоновом режиме, я должен реализовать некоторую блокировку, чтобы мой поток ожидал, пока он не будет готов. Мне также не нужны точные отчеты о времени экрана, поэтому не проблема, если Firebase Analyics регистрирует обратный вызов жизненного цикла своей активности с задержкой.

P.S. Внутри FirebaseApp.initializeApp() есть блок synchronized, что означает, что инженеры предполагали, что кто-то попытается вызвать его из другого потока. Я больше беспокоюсь о внутренних органах, которые не открыты для изучения.

P.P.S. Кроме того, мое приложение представляет собой однопроцессное приложение, поэтому маловероятно, что Application.onStart() будет вызываться для меня несколько раз (если я что-то здесь не упущу).

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