Подтвердить что ты не робот

Android SystemII глючит в Lollipop

Эта ошибка только происходит на моем Nexus 5, а мой Nexus 7 работает Lollipop.

ИЗМЕНИТЬ

Эта ошибка также встречается в новом Входящие приложении Google, когда я перехожу в папку "Входящие" > "Настройки" > "Уведомления" > любой элемент и обратно...

/EDIT

  • compileSdkVersion 21
  • buildToolsVersion 21.1.1
  • compile 'com.android.support:appcompat-v7:21.0.2'

У меня есть GalleryActivity, который показывает несколько изображений, один раз на странице (внутри ViewPager. Когда я нажимаю кнопку "Назад", иногда у Android SystemUI есть сбои.

Обычный вид

normal

Glitched view

glitched

Посмотрите, как представления повторяются и внутри самой системы?

Простое событие касания возвращает обычные представления SystemUI.

Что происходит?

Может быть похож на:

4b9b3361

Ответ 1

Настройка android:hardwareAccelerated="false" - это своего рода экстремальное решение, так как графическая производительность, вероятно, будет очень плохой.

Если вы можете точно определить мнение, которое является неправильным и вызвало эту проблему, лучшим решением было бы переключить его на рендеринг программного обеспечения вместо setLayerType(), например

view.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

Забавно, что до сих пор я не испытывал никаких сбоев с Lollipop, но мы видели их в KITKAT (как упоминалось в этом вопросе), и только когда WebViews присутствуют на экране.

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


До сих пор каждое возникновение этой проблемы связано с WebViews (или с компонентами, использующими WebView, такими как AdMob). Согласно AOSP Issue Tracker проблема устранена в Android 5.0, но, похоже, это не так.

Ответ 2

Я видел сбои UI с Lollipop, хотя и отличается от вашего. Единственным обходным решением, которое я нашел, было отключение аппаратного ускорения:

android:hardwareAccelerated="false"

на уровне активности или приложения. Если это устраняет ваши сбои, обязательно сообщите об этом Google, так как это указывает на ошибку в платформе. Уже есть хотя бы один открытый отчет с ними.

Я бы не захотел развернуть приложение с этим параметром, оно действительно предназначалось только для ответа на ПОЧЕМУ и помогло доказать, что это не ошибка в вашем коде.

Надеюсь, это поможет!

EDIT 12/10/2014:

@matiash предложил гораздо более точный ответ, чем это предложение "кувалды". Я видел сбои в основном на ActionBar в приложении с несколькими вкладками с ViewPager и всегда на вкладках/страницах без какого-либо WebView. Однако один из моих вкладок/фрагментов имеет встроенный WebView, и при настройке на рендеринг программного обеспечения мои глюки, похоже, ушли. Мне не совсем неудобно устанавливать обходное решение, предлагаемое @matiash в приложении для доставки... хотя оно все еще указывает на некоторые основные проблемы на платформе.

Ответ 3

Я также видел эту проблему в своем приложении.

Любые Android-разработчики когда-либо испытывают такой визуальный статический? (см. рисунок)

Я не только получил визуальный статический, но и повторный рисунок. Только он наблюдался на Nexus 5 с 5.0 при разработке с api 21 и поддержкой библиотеки 21.0. +.

Для меня это не очень воспроизводимо. Это произойдет неоднократно в течение одного сеанса использования, но на следующий день я не смогу воспроизвести его.

Я не использую WebViews (допускаю, возможно, через admob). Я использую ViewPagers с фрагментами. Я также использую DragSortList и впервые начал видеть проблему в действиях, которые ее использовали.

https://github.com/bauerca/drag-sort-listview

Насколько воспроизводимым это для вас, ребята?

Ответ 4

Вы пытались установить android:fitsSystemWindows="true" в макете Fragment? это позволит убедиться, что макет ниже statusBar, im не совсем уверен в кнопках навигации, но я думаю, что это тоже сработает для него.

Ответ 5

Схема запроса вызова на DecorView после рендеринга:

getActivity().getWindow().getDecorView().requestLayout();

Я называю это с помощью postDelay() в WebViewClient.onPageFinished(). Это не идеальное решение (только обходное решение), но, возможно, лучший способ, например LAYER_TYPE_SOFTWARE.

Ответ 6

......... перейдите к настройкам, а затем к вариантам разработчика (если они не видны... перейдите к телефону, затем щелкните по номеру сборки 7-10 раз и включите режим разработчика), и там прокрутите вниз и отвяжите "показывать границы макета", и все готово. его просто и легко.