Intereting Posts
Фрагмент placehoder в макете Это приложение или используемая им библиотека использует NSQuickDrawView, который устарел. Приложения должны прекратить использование QuickDraw и перейти к Quartz Устанавливать текст счетчика перед выбором элемента Как определить различные зависимости для разных продуктов Почему Google выбрал Java для операционной системы Android? Измените layout_scrollFlags программно в CollapsingToolbarLayout Android: как избежать этого нажатия на вызовы уведомлений onCreate () Как добавить Selendroid в студию Android для веб-очистки? Android 5.0: изменение настроек Обзор экрана Название задачи Цвет фона Сбой сборки гребня Статические переменные, какова их продолжительность жизни? Ошибка при действии ActionBarSherlock SearchView Неверный порядок рендеринга для кнопки при применении материальной темы Android: разница между невидимыми и ушла? Андроид играть фильм внутри файла расширения

EnterTransitionCoordinator вызывает NPE в Android 5.0

После добавления выхода и перехода активности в приложение я получаю отчеты о сбоях, например:

Fatal Exception: java.lang.NullPointerException: попытка вызвать виртуальный метод «android.view.ViewParent android.view.View.getParent ()» в ссылке на нулевой объект в android.view.ViewOverlay $ OverlayViewGroup.add (ViewOverlay.java: 164) в android.view.ViewGroupOverlay.add (ViewGroupOverlay.java:63) в android.app.EnterTransitionCoordinator.startRejectedAnimations (EnterTransitionCoordinator.java:598) в android.app.EnterTransitionCoordinator.startSharedElementTransition (EnterTransitionCoordinator.java:325) в android. App.EnterTransitionCoordinator.access $ 200 (EnterTransitionCoordinator.java:42) в android.app.EnterTransitionCoordinator $ 5 $ 1.run (EnterTransitionCoordinator.java:389) в android.app.ActivityTransitionCoordinator.startTransition (ActivityTransitionCoordinator.java:698) в android.app. EnterTransitionCoordinator $ 5.onPreDraw (EnterTransitionCoordinator.java:386) в android.view.ViewTreeObserver.dispatchOnPreDraw (ViewTreeObserver.java:847) в android.view.ViewRootImpl.performTraversa Ls (ViewRootImpl.java:1985) в android.view.ViewRootImpl.doTraversal (ViewRootImpl.java:1077) в android.view.ViewRootImpl $ TraversalRunnable.run (ViewRootImpl.java:5845) в android.view.Choreographer $ CallbackRecord.run (Хореограф.ява: 767) на android.view.Choreographer.doCallbacks (Хореограф.java:580) на android.view.Choreographer.doFrame (Хореограф.java:550) на android.view.Choreographer $ FrameDisplayEventReceiver.run (Хореограф. Java: 753) на android.os.Handler.handleCallback (Handler.java:739) на android.os.Handler.dispatchMessage (Handler.java:95) на android.os.Looper.loop (Looper.java:135) на Android.app.ActivityThread.main (ActivityThread.java:5272) в java.lang.reflect.Method.invoke (Method.java) в java.lang.reflect.Method.invoke (Method.java:372) в com.android .internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:909) в com.android.internal.os.ZygoteInit.main (ZygoteInit.java:704)

Это не воспроизводимо, но количество сбоев значимо.

Проведя некоторые исследования, я наткнулся на эту фиксацию, предположив, что это (на самом деле) внутренняя ошибка в Android: https://android.googlesource.com/platform/frameworks/base/+/83c692efd3c53050fce132dfd2ef21763d3cf010%5E%21/#F0

Все отчеты об авариях – 5.0, 5.0.1 или 5.0.2. Поскольку 5.1 имеет более широкое распространение, но не показывает сбоев, похоже, что EnterTransitionCoordinator был зафиксирован в 5.1.

Таким образом, возможным решением было бы проверить уровень API на уровне 22 или выше, и тогда выполняются только переходы. Однако мне интересно, есть ли лучший способ; Возможно, обходное решение, несмотря на это, кажется, является внутренним делом Android (все системные классы в стеке)?

Solutions Collecting From Web of "EnterTransitionCoordinator вызывает NPE в Android 5.0"

После того, как для перехода на уровень API 22 (Android 5.1) потребуется переход, сбои исчезли. Так что это самое простое решение. Если вам нужно поддержать это с помощью Android 5.0, проверьте ответ Никола (мы сами не пытались избежать дополнительного кода).

Для более низкого, чем API, чем 5.1, отложите переход общего элемента, используя postponeEnterTransition() . Зарегистрируйте слушателя OnDrawListener в ViewTreeObserver в представлении декора (возможно) или в виде содержимого ( android.R.id.content ) и начните переход, как только onDraw() . Не забудьте отменить регистрацию слушателя, как только вы начнете переход.

Эта ошибка ОС Android связана с обработкой «отклоненных» элементов во время перехода общего элемента. Общий элемент будет отклонен (исключен из перехода), если он не прикреплен к окну, что может произойти, потому что его видимость установлена ​​в GONE .

Обходной путь, который я использую, – проверить каждый потенциальный общий вид элемента перед вызовом makeSceneTransitionAnimation() и включить его только в список, если его видимость установлена ​​в VISIBLE .