В моей настройке 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()
будет вызываться для меня несколько раз (если я что-то здесь не упущу).