Xamarin.forms: [Ошибка] Приложение оболочки мерцает при обратной навигации

Созданный на 20 нояб. 2019  ·  58Комментарии  ·  Источник: xamarin/Xamarin.Forms

Описание

Анимация навигации мигает, на короткое время отображается черный экран при возвращении в приложение Shell.

Действия по воспроизведению

Вернуться назад.

Ожидаемое поведение

Не мерцай.

Фактическое поведение

Мерцание.

Основная информация

  • Версия с проблемой:
  • Последняя известная хорошая версия:
  • IDE: VS 2019 16.3.9
  • Целевая платформа платформы:

    • iOS: нет данных

    • Android: 9.0

    • UWP: н / д

  • Версия библиотеки поддержки Android:
  • Пакеты Nuget:
  • Затронутые устройства: Samsung Galaxy S8, S10

Скриншоты

Замедленное видео проблемы: https://i.imgur.com/bWAVzgY.mp4

Ссылка на воспроизведение

shell 3 in-progress Android bug

Самый полезный комментарий

Я протестировал nuget с образцом xaminals

https://github.com/xamarin/Xamarin.Forms/issues/6294

И с этим nuget больше не возникает мерцания

Все 58 Комментарий

Временное решение, если вы делаете переопределение, без анимации мерцания не будет!

protected override bool OnBackButtonPressed() {Current.Navigation.PopAsync(false); return true;}

Привет @ z07713! Спасибо за отчет и добавление видео, а также за обходной путь! Отличная работа 😄

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

Кроме того, вы пробовали это на iOS и видели то же самое? Или на iOS не пробовали?

Благодаря!

Привет @ z07713! Спасибо за отчет и добавление видео, а также за обходной путь! Отличная работа 😄

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

Кроме того, вы пробовали это на iOS и видели то же самое? Или на iOS не пробовали?

Благодаря!

Привет, @jfversluis , спасибо за ответ, вот репродукция, которую вы просили: https://drive.google.com/open?id=1WkGh6QwTOP380gX4RrRsksSGBoJNWeuc

Кроме того, я не пробовал это на IOS, и у меня нет возможности сделать это, у меня нет Mac.

Отлично, спасибо @ z07713 !

Определенно вижу, как это происходит, спасибо за репродукцию.

Возможно, стоит отметить, что обходной путь
protected override bool OnBackButtonPressed() {Current.Navigation.PopAsync(false); return true;}
Работает только при применении внутри кода, стоящего за AppShell.xaml, и не работает при размещении на отдельных страницах. Я думаю это относится к 7072

В качестве рабочей области переопределение OnPopAsync из ShellSection для отключения анимации может быть более целенаправленным.

public class CustomShellSection : ShellSection
{
    protected override Task<Page> OnPopAsync(bool animated)
    {
        return base.OnPopAsync(false); // ignore the parameter
    }
}

@jfversluis для меня, похоже, это работает правильно на iOS (13.3).

Отключение анимации - не вариант для нас, и мы как раз завершали выпуск релиза. Нам придется откатиться до 4.3, что плохо, поскольку это приведет к повторному открытию некоторых ошибок в основном в оболочке и карусели.

Вероятно, нам придется отключить некоторые функции и выпустить без них, что печально, учитывая, как долго мы над ними работали.

Есть ли обходной путь, кроме отключения анимации?

Есть ли шанс, что это будет решено до 16 января? Было бы здорово. Благодарю.

Обратите внимание, с анимацией PopModal проблем нет.

Сожалеем, что @jonx. Даже если бы мы исправили его до 16 января, маловероятно, что он станет частью NuGet, который мы выпустим раньше. Если это что-то блокирует ваш релиз, я бы не стал делать ставку на этот вариант. Прости за это.

Ничего страшного @jfversluis , я понимаю, спасибо за комментарий. Нам просто придется отложить выпуск.
@ z07713 есть способ снова поделиться своим образцом, я больше не могу получить доступ к вашим ссылкам. Я хотел бы увидеть, действительно ли это та же проблема, что и у меня, потому что для меня я могу ненадолго увидеть, как появляется другой экран моего приложения вместо черного экрана (это в контексте мастера; когда я открываю текущую страницу, Я кратко вижу первую страницу своего мастера). Благодарю.
@jfversluis, знаете ли вы, какое изменение в 4.4

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

@jonx вот так: https://drive.google.com/open?id=19apVlQS0TafFeBT16aCfzvtvCwcweVgS

Кроме того, в нем установлены формы 4.3.0.991211: /

У меня тоже есть эта проблема. Я пробовал поставить строку:
защищенное переопределение bool OnBackButtonPressed () {Current.Navigation.PopAsync (ложь); вернуть истину; }
в моем appShell.xaml.cs, а мигание все еще присутствует. Если бы кто-нибудь мог помочь мне разобраться в работе ... Это было бы здорово!

У нас тоже есть та же проблема, и это довольно неприятно, если вы хотите использовать оболочку с анимацией. : |

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

когда ошибка будет исправлена?

У меня такая же проблема в Windows UWP при переходе на страницу содержимого с помощью Navigation.PushAsyc(<Page Object>,false)

Есть ли способ обхода этого?

@jfverslu есть какие-нибудь обновления по этому

@ z07713 Боюсь, пока нет, извините! Обнаружили ли вы какие-либо новые данные об этом случайно, которые могли бы нам помочь?

Таким образом, команда Xamarin позволяет мерцающей проблеме, которая полностью разрушает UX, находиться в репозитории в течение нескольких месяцев. Для меня это безумие. В настоящее время сталкиваюсь с этой проблемой, и я сожалею, что не перешел на нативный, потому что у меня головная боль при навигации по собственному приложению.

@jfversluis Я провел несколько тестов, надеюсь, это поможет вам, ребята, найти ошибку:

Для воспроизведения я использовал стандартный шаблон Visual Studio, который использует Xamarin Forms 4.3.0.908675.
Я не вносил изменений в код. Никакого мерцания в стандартном приложении-шаблоне.

После этого я обновил пакет Xamarin Forms до 4.3.0.947036.
Никаких изменений в коде. Мерцание появляется не в эмуляторе, а только на реальном устройстве Android (в моем случае Samsung Galaxy A40), оно также не появляется в симуляторе iOS или iPhone 8.

Таким образом, между этими двумя версиями должно быть изменение, которое вызывает мерцание.

Потрясающе! @AndreasLichtsinn

@jfversluis Единственное, что стоит упомянуть, это то, что мы полностью перестали использовать оболочку из-за этого: /

Спасибо за расследование @AndreasLichtsinn! Очень ценная информация :)

Еще одна вещь, которую я нашел для проблемы с миганием.
Когда я создаю приложение Shell с шаблоном, если я изменяю навигацию (в коде позади ItemsPage) с «Navigation.PushAsync (new ItemDetailPage ())» на «Shell.Current.GoToAsync (« itemDetailPage », false) ", то я увижу мигание на устройстве Android. Я проверил это на исходной версии Xamarin.Forms 4.3.xxx и последней версии 4.5.xxx.

Честно говоря, несмотря на то, что есть несколько проблем с навигацией при навигации Shell (например, единственная навигация от страницы к странице, переход параметров и т. Д.), Эта ошибка фактически блокирует мой выпуск, и это сделает оболочку полностью непригодной для использования. Пожалуйста, исправьте ошибку как можно скорее !!!

Доброе утро, у меня такие же проблемы, как описано выше. Я хотел бы знать, есть ли какое-нибудь решение?

Здесь такие же проблемы. Отключение анимации я не считаю обходным решением, тем более, что нет простого способа сделать это с помощью Back Button Pop.

Надеюсь, это быстро исправят!

Могу подтвердить, что в версии 4.3.0.90867 нет моргания.

Не тестировал версию выше, однако проблема все еще сохраняется в версии 4.5.0.356.

Проблема все еще сохраняется в последней стабильной версии.

Здесь такие же проблемы. Отключение анимации я не считаю обходным решением, тем более, что нет простого способа сделать это с помощью Back Button Pop.

Надеюсь, это быстро исправят!

@kevinjpetersen, это произойдет, только если вы сможете исправить это как можно скорее. Он открыт с середины ноября прошлого года.

ваш лучший пост! Исправление заключается в том, чтобы опробовать результаты версией 4.3.0.90867.

Дополнительная информация: ошибка представлена ​​в этом коммите: https://github.com/xamarin/Xamarin.Forms/commit/2b4ccdc88f8db7a2a0b78a1adf3428125eb677b5

Похоже, если я закомментирую эту строку:
https://github.com/xamarin/Xamarin.Forms/blob/1532d46f5fb6f219594015b80f8e5a2476512882/Xamarin.Forms.Core/Shell/ShellSection.cs#L499
тогда моргания нет.

Кто-нибудь мог бы разобраться в этом, у кого больше опыта, чем у меня ...

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

Итак, вот: https://github.com/xamarin/Xamarin.Forms/blob/1532d46f5fb6f219594015b80f8e5a2476512882/Xamarin.Forms.Core/Shell/ShellSection.cs#L600

Измените это:

            _navigationRequested?.Invoke(this, args);
            if (args.Task != null)
                await args.Task;
            RemovePage(page);

к этому:

            RemovePage(page);
            _navigationRequested?.Invoke(this, args);
            if (args.Task != null)
                await args.Task;

@tdamir очень хорошая находка!

Если ваш вывод точен @tdamir , проблема будет в ожидается args.Task вероятно, вызванное переключением контекста из UI-Thread-UI.

Задача всегда ожидается

https://github.com/xamarin/Xamarin.Forms/blob/7a52542d50797ccc69ae1d8dd84259190d96bdb4/Xamarin.Forms.Platform.Android/Renderers/ShellItemRendererBase.cs#L302

хотя на Android args.Task в этом методе всегда Task.FromResult(...)
https://github.com/xamarin/Xamarin.Forms/blob/7a52542d50797ccc69ae1d8dd84259190d96bdb4/Xamarin.Forms.Platform.Android/Renderers/ShellItemRendererBase.cs#L134
но думаю, что найден более вероятный виновник
https://github.com/xamarin/Xamarin.Forms/blob/7a52542d50797ccc69ae1d8dd84259190d96bdb4/Xamarin.Forms.Platform.Android/Renderers/ShellItemRendererBase.cs#L252 -L259

он меняет цвет фона при навигации (не уверен, если всегда)! Почему?

Также кажется, что мигание происходит только на вкладке.

Многое нужно сделать.

Отличная работа @tdamir и @ahmedalejo! :)

@ahmedalejo Круто! Просто хочу рассказать об этом, я не думаю, что это только вкладки. У меня такое же мерцание, и все, что у меня есть, это в моем AppShell (также известном как TabBar):

<?xml version="1.0" encoding="UTF-8"?>
<Shell xmlns="http://xamarin.com/schemas/2014/forms" 
       xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
       xmlns:d="http://xamarin.com/schemas/2014/forms/design"
       xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
       xmlns:views="clr-namespace:MyApp.Views"
       mc:Ignorable="d"
       Title="MyApp"
       Visual="Material"
       Shell.BackgroundColor="{StaticResource JFBlack}"
       Shell.TitleColor="{StaticResource JFWhite}"
       Shell.ForegroundColor="{StaticResource JFWhite}"
       FlyoutBehavior="Disabled"
       Shell.TabBarIsVisible="False"
       x:Class="MyApp.AppShell">

    <ShellContent Route="login">
        <views:LoginPage />
    </ShellContent>
    <ShellContent Route="overview">
        <views:OverviewPage />
    </ShellContent>

</Shell>

@ahmedalejo Да, часть с изменением цвета странная, но если я ее удалю, она все равно мигает.

Похоже, что перед навигацией необходимо вызвать https://github.com/xamarin/Xamarin.Forms/blob/1532d46f5fb6f219594015b80f8e5a2476512882/Xamarin.Forms.Core/Shell/ShellSection.cs#L499 .

Привет, @PureWeen и @rmarinho

не могли бы вы понять, зачем звонить на SendAppearanceChange() ниже
https://github.com/xamarin/Xamarin.Forms/blob/1532d46f5fb6f219594015b80f8e5a2476512882/Xamarin.Forms.Core/Shell/ShellSection.cs#L499

заставляет мигать?

Может ли кто-нибудь посоветовать обходной путь?

Решение с

protected override bool OnBackButtonPressed() 
{
  Current.Navigation.PopAsync(false); return true;
}

не работает.

Я нашел обходной путь (спасибо https://github.com/xamarin/Xamarin.Forms/issues/8581#issuecomment-569583965)

    public class CustomTab : Tab
    {
        protected override Task<Page> OnPopAsync(bool animated)
        {
            // temporary workaround while https://github.com/xamarin/Xamarin.Forms/issues/8581 not fixed
            return base.OnPopAsync(animated: false); 
        }
    }

А затем используйте CustomTab в XAML.

Приведенное ниже исправление работает только с аппаратной навигацией по кнопке возврата (и не работает в других случаях обратной навигации):

protected override bool OnBackButtonPressed() 
{
  Current.Navigation.PopAsync(false); return true;
}

Спасибо @pfedotovsky, я подозревал, что это тоже может быть связано с навигацией по вкладкам.

То же самое происходит и с нами, начиная с 4.3, мерцание присутствует на Android.

Только что обнаружил эту ошибку в годовщину ее годовщины. [Shell] навигация - мигает # 5755

Та же проблема здесь при возврате, мерцание экрана.

Например:
https://github.com/mallibone/ShellLoginSample

Спасибо за исследование @ahmedalejo, благодаря ему очень легко найти и исправить

https://github.com/xamarin/Xamarin.Forms/pull/10158

После завершения сборки, если кто-то захочет протестировать nugets и сообщить мне, будет ли проблема решена, это будет полезно.

https://dev.azure.com/xamarin/public/_build/results?buildId=16155&view=results

Я протестировал nuget с образцом xaminals

https://github.com/xamarin/Xamarin.Forms/issues/6294

И с этим nuget больше не возникает мерцания

@PureWeen Хорошо, я сделал тест:

Я создал новое приложение Shell Sample с Xamarin Forms 4.3.0.908675 -> Без мерцания
Затем я обновился до последней стабильной версии 4.5.0.495 -> Мерцание
Затем я обновился до последней версии 4.6.0.1693 -> Без мерцания

Отличная работа! Надеюсь, другие смогут это подтвердить.

@PureWeen Хорошо, я сделал тест:

Я создал новое приложение Shell Sample с Xamarin Forms 4.3.0.908675 -> Без мерцания
Затем я обновился до последней стабильной версии 4.5.0.495 -> Мерцание
Затем я обновился до последней версии 4.6.0.1693 -> Без мерцания

Отличная работа! Надеюсь, другие смогут это подтвердить.

@AndreasLichtsinn не может найти Xamarin Forms 4.6.0.1693

@PureWeen Хорошо, я сделал тест:

Я создал новое приложение Shell Sample с Xamarin Forms 4.3.0.908675 -> Без мерцания
Затем я обновился до последней стабильной версии 4.5.0.495 -> Мерцание
Затем я обновился до последней версии 4.6.0.1693 -> Без мерцания

Отличная работа! Надеюсь, другие смогут это подтвердить.

@AndreasLichtsinn, я тоже не могу найти билд 1693! Кроме того, 4.7.0.531-nightly все еще мерцает: /

@angelru @RsZoli Это в опубликованных артефактах, которые опубликовал PureWeen
image

@angelru Спасибо за тестирование !!!!

@angelru Спасибо за тестирование !!!!

@PureWeen Не могу протестировать, не могу скачать

О, вы цитировали @AndreasLichtsinn :-)

Спасибо @AndreasLichtsinn за тестирование !!!

@angelru
Перейти по ссылке:
https://dev.azure.com/xamarin/public/_build/results?buildId=16155&view=results
Кликните сюда:
image
Тогда вот:
image
Затем распакуйте zip и создайте локальный источник пакета nuget в этой папке:
image
Затем выберите этот локальный источник пакета и установите его оттуда:
image

@angelru
Перейти по ссылке:
https://dev.azure.com/xamarin/public/_build/results?buildId=16155&view=results
Кликните сюда:
image
Тогда вот:
image
Затем распакуйте zip и создайте локальный источник пакета nuget в этой папке:
image
Затем выберите этот локальный источник пакета и установите его оттуда:
image

Большое спасибо!!! оно работает!

Я могу подтвердить, что в Xamarin Forms 4.6.0.1693 нет мерцания.

Благодаря!

закрыто # 10158

У меня такая же проблема с последними формами Xamarin 4.8. Я обнаружил, что на iOS страницы с метками с TextType = 'Html' вызывают проблему ...

Открыл новый выпуск. # 12385

Была ли эта страница полезной?
0 / 5 - 0 рейтинги