Очередная статья об ускорении холодного запуска приложения.
РЕКОМЕНДУЕМ:
Основные моменты:
1. Ленивая инициализация. Ленивая инициализация объектов с помощью Dagger Lazy позволяет сильно сократить время старта приложения.
2 Фоновые потоки. Чтобы основной поток приложения не тратил время на инициализацию компонентов, эту задачу лучше вынести в фоновый поток:
1 2 3 4 5 6 7 8 9 10 11 12 |
override fun onCreate() { super.onCreate() setupDependencyInjection() observeProcessLifecycle() Executors.newSingleThreadExecutor().execute { firebaseRemoteConfig.get().fetchAndActivate() setupJobScheduler() setupAppsFlyer() setupAnalytics() trackDeviceInfo() } } |
2. Оптимизация элементов UI. Чем меньше в UI используется сложных вложенных друг в друга элементов интерфейса, тем быстрее отрабатывает отрисовка. Самый простой способ сделать это — использовать Constraint Layout, способный заменить слоеный пирог других лейаутов. При этом самым быстрым в отрисовке считается FrameLayout. Именно его следует использовать в качестве контейнера.
3. Удаление Firebase. Firebase — отличный инструмент аналитики, но на его инициализацию уходит слишком много времени. Если удалить Firebase и заменить его более легким решением, то можно выиграть несколько десятков миллисекунд.
4. Избавление от Joda Time. Joda Time — прекрасная библиотека для работы со временем, но в ней используются крайне неэффективные решения. Лучше либо заменить эту библиотеку java.time, либо отложить ее инициализацию на как можно более позднее время.
5. Ленивая инициализация content provider’ов. Инициализация провайдеров контента (а среди них есть и WorkManager, и тот же Firebase) происходит в основном потоке до запуска самого приложения. Используя библиотеку Jetpack AndroidX App Startup, инициализацию content provider’ов можно отложить и сэкономить еще несколько десятков миллисекунд.
6. Отказ от I/O-операции и десериализации JSON в основном потоке. Здесь все просто и логично.
How OkCredit Android App improved Cold Startup by 70% Anjal Saneen