2016-07-20 5 views
3

После того, как я начал использовать элементы пользовательского интерфейса из библиотеки дизайна поддержки Android, начальное время загрузки приложения стало очень медленным (около 8 секунд!), И я действительно не знаю, почему.Android-приложение медленное начальное время запуска

Я запускал отслеживание методов во время большей части запуска (для начала работы с монитором процессора требуется время для студии Android), и он потратил на это 4 секунды: dalvik.system.DexFile.openDexFile, я не уверен, почему это так долго.

Любые идеи? (Я не добавлял никакого кода, так как в моем приложении много кода, и я не знаю, откуда эта проблема) ...

+0

Я испытал увеличение скорости, когда создаю приложение для выпуска вместо версии отладки, которую я нормально запускаю. Может быть, вы можете это проверить. – miqueloi

+0

Как это сделать? – TomerZ

+0

@miqueloi Huh, интересно, это сработало, вы знаете почему? – TomerZ

ответ

6

Я испытал увеличение скорости при создании приложения для выпуска вместо версии отладки, которую я нормально выполнял.

Я не уверен, почему он работает, но я предполагаю, что это должно быть из-за того, как компилятор связывает ext libs с apk. Я когда-то видел интервью с Чет Хаазе, который является одним из разработчиков платформы android ui, который объяснил, как они пытались показать первую активность в приложении как можно быстрее, чтобы избежать скучного экрана заставки. Возможно, эта функция каким-то образом включена в процессе сборки релиза.

EDIT: Правильный ответ написан на @Embydextrous. Это связано с тем, что приложение находится в режиме отладки.

+1

релиз сборки использует proguard и удаляет нежелательные методы. Таким образом, создается только один файл .dex. Попробуйте извлечь из него сборку сборки и отладки. Вероятно, вы увидите несколько файлов * .dex классов в сборке отладки и только один в сборке релизов. Я также ответил на этот вопрос. – Embydextrous

+0

Да, вы поняли. Делает смысл. – miqueloi

+0

http://stackoverflow.com/a/38476244/3529873 - Ссылка на мой ответ. – Embydextrous

0

Как следует из названия openDexFile является процессом андроида, который загружает метод из файла dex, чем больше и чем больше файлов, тем больше загрузка.

Так что мой ответ на ваш вопрос просто уменьшить количество методов, которые вы имеете и предпочитают ленивую загрузку библиотек вместо инициализации их применение

Таким образом, вместо инициализации вашей чистой LIB в App.onCreate инициализировать его по первому требованию , не создавайте свой db до его необходимости.

также использовать Android: windowBackground в вашем приложении Тхаме, чтобы показать пользователю прелоадер вместо whitescreen :)

Как лучше видеть метод подсчета:

В андроида студии под плагинами установить «Android методы Count», что это очень простые плагины, и я думаю, что его название подсказывает, что он делает :)

Теперь, когда ваше ноу-хау вашего проекта уменьшено, количество библиотек, которые вы используете прямо сейчас, вы можете захотеть использовать gradle-> root -> Tasks-> android-> AndroidDependencies, чтобы узнать, какие дополнительные библиотеки добавлены в ваш проект.

Также не забудьте использовать основные игровые сервисы и только те библиотеки, которые вы фактически используете.

4

Это обычно происходит с отладочными сборками, но также может произойти с релизными сборками.

В случае использования нескольких файлов dex. Сначала загружается основной файл dex (classes.dex), который затем загружает другие файлы dex.

Обычно он не отображается в релиз-сборках из-за proguard, который удаляет неиспользуемые методы и уменьшает количество методов, поэтому создается только один .dex. В debug build proguard не используется, поэтому есть несколько файлов dex.

Однако в очень больших приложениях, таких как AirBnb, Facebook, twitter и т. Д., Есть несколько файлов dex. И, следовательно, задержки запуска приложений, которые можно оптимизировать с помощью оптимизаторов dex.

Смежные вопросы