SupportMapFragment загружается очень медленно в первый раз, но быстро при последующих загрузках (включая различные действия)

В моем приложении есть три разных действия, которые используют SupportMapFragment. Существует большая задержка при первой загрузке после запуска приложения. Это медленное время загрузки не происходит при последующих загрузках, даже если я вернусь и получу совершенно другое действие (которое также содержит карту). Я пытаюсь понять, можно ли это исправить.

Это описание показывает, как я загружаю файл SupportMapFragment. Используя точки отладки, я определил, что медлительность возникает между onViewCreated и onStart.

Обновление 1: с помощью Debug я получил две трассировки первой загрузки и второй загрузки. Вторая загрузка совсем в другом Activity. Я быстро заметил, что первая трассировка (медленная загрузка) имеет МНОГО обращений к java/util/zip/zipEntry. Я не вижу таких вызовов во второй трассировке. Кроме того, эта задержка происходит между onCreateView и onViewCreated MapFragment.

Обновление 2: это также происходит с MapFragment (не поддерживается), за исключением того, что задержка на самом деле намного больше.

Обновление 3: этот вопрос SO кажется связанным. Также этот.


person theblang    schedule 17.11.2014    source источник
comment
Почему вы используете вложенные фрагменты, а не расширяете SupportMapFragment или просто используете его напрямую?   -  person CommonsWare    schedule 17.11.2014
comment
@CommonsWare Я использую его в ViewPager, поэтому я загружаю Fragment, который загружает и настраивает SupportMapFragment.   -  person theblang    schedule 17.11.2014
comment
Я использую его в ViewPager - так? Это не оправдывает накладные расходы и общую неприглядность вложенных фрагментов. Вот пример проекта, показывающий использование карт в ViewPager, без вложенных фрагментов. Обратите внимание, что я использую MapFragment, а не SupportMapFragment, но это не должно влиять на решение. Если вы хотите использовать вложенные фрагменты местами, продолжайте, но делайте это только при отсутствии менее дорогих решений.   -  person CommonsWare    schedule 17.11.2014
comment
@CommonsWare Я провел рефакторинг таким образом, что ViewPager находится в действии, а CustomMapFragment является прямым фрагментом. При первой загрузке все еще есть почти двухсекундная задержка. Может ли это быть проблемой с SupportMapFragment? Я мог бы конвертировать, так как мы отказались от поддержки API 10 после выпуска нашей последней версии.   -  person theblang    schedule 17.11.2014
comment
Может ли это быть проблемой с SupportMapFragment? -- Трудно сказать, но сомневаюсь. Используйте Traceview, чтобы определить, на что тратится ваше время, а не просто записи в журнал. Я предполагаю, что большая часть этого времени является частью инициализации связи с Play Services Framework и начала загрузки фрагментов карты, и это не то, что вы можете легко изменить.   -  person CommonsWare    schedule 17.11.2014
comment
Используя Debug, я взял две трассировки первой загрузки и второй загрузки. Вторая загрузка находится в совершенно другом Activity. Я быстро заметил, что первая трассировка (медленная загрузка) имеет МНОГО обращений к java/util/zip/zipEntry. Я не вижу ничего во втором следе. Кроме того, эта задержка происходит между onCreateView и onViewCreated.   -  person theblang    schedule 17.11.2014
comment
@CommonsWare Кажется, что нет никакого способа обойти задержку, которую я ненавижу, потому что она также влияет на соседние фрагменты в ViewPager (OffscreenPageLimit должен быть не менее 1).   -  person theblang    schedule 18.11.2014
comment
См. мой ответ там stackoverflow.com/a/29246677/3757624. Он все еще работает.   -  person Xyaren    schedule 09.05.2015
comment
Возможный дубликат что замедляет загрузку фрагмента моей карты?   -  person marmor    schedule 04.11.2015