У меня есть NativeContentAdView
в ListView
предмете. Когда я звоню setNativeAd(NativeAd)
, происходит заметное отставание. Все имена классов и методов AdMob искажены (zzdt
, zzalp
, zzow
и т. Д.), Поэтому я их опускаю.
Вещи, которые AdMob выполняет в View#onAttachedToWindow
обратном вызове:
- регистрирует несколько
BroadcastReceiver
с (для каждой требуется транзакция Binder) (сумма ~ 10 мс)
Вещи, которые AdMob выполняет в OnScrollChangedListener#onScrollChanged
:
десятки преобразований DP-в-PX, вызов Display#getMetrics
и запуск транзакции Binder для каждого преобразования (сумма ~ 7 мс)
генерирует JSON (~ 8 мс)
оценивает некоторые JS (~ 7 мс)
создает экземпляр WebView
(~ 5,5 мс), устанавливает его (~ 9 мс), запрашивает loadUrl
(~ 7,5 мс)
Внутри Handler#handleCallback
с (т. Е. Handler#post
):
Создает WebView
, устанавливает его, добавляет в Window и оценивает JS (~ 27 мс)
Получает packageInfo (IPC), создает WebView
, устанавливает его, запрашивает loadUrl
, проверяет разрешения (IPC), анализирует JSON, еще раз получает packageInfo, анализирует ресурсы через Resources#getIdentifier
, получает ActivityInfo (IPC) (сумма ~ 40 мс)
Очевидно, что все эти тяжелые операции приводят к прерывистой прокрутке.
Что мне делать, чтобы избежать лагов или что я, возможно, делаю неправильно? Почему родная AD AdMob не работает так медленно в других приложениях, которые я видел?
Использование AdMob / GMS v. 10 и / или 11, но 16 показывает те же лаги.
Все измерения производятся с помощью Nanoscope на их специальном эмуляторе, но отставание от настоящего не очень старого Nexus 5 еще хуже.