Xamarin.forms: [Bug] Shell-Anwendung flackert bei der RĂŒckennavigation

Erstellt am 20. Nov. 2019  Â·  58Kommentare  Â·  Quelle: xamarin/Xamarin.Forms

Beschreibung

Die Navigationsanimation flackert und zeigt beim ZurĂŒcknavigieren in einer Shell-Anwendung kurz einen schwarzen Bildschirm an.

Schritte zum Reproduzieren

Navigieren Sie zurĂŒck.

Erwartetes Verhalten

Flackere nicht.

TatsÀchliches Verhalten

Flackern.

Grundinformation

  • Version mit Problem:
  • Letzte bekannte gute Version:
  • IDE: VS 2019 16.3.9
  • Plattform-Ziel-Frameworks:

    • iOS: n / a

    • Android: 9.0

    • UWP: n / a

  • Android Support Library Version:
  • Nuget-Pakete:
  • Betroffene GerĂ€te: Samsung Galaxy S8, S10

Screenshots

Zeitlupenvideo des Problems: https://i.imgur.com/bWAVzgY.mp4

Reproduktionslink

shell 3 in-progress Android bug

Hilfreichster Kommentar

Ich habe das Nuget mit der Xaminals-Probe getestet

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

Und mit diesem Nuget tritt das Flackern nicht mehr auf

Alle 58 Kommentare

Eine vorĂŒbergehende Problemumgehung, wenn Sie einen Override durchfĂŒhren, ohne Animation gibt es kein Flackern!

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

Hey @ z07713! Vielen Dank fĂŒr den Bericht und das HinzufĂŒgen des Videos sowie eine Problemumgehung! Großartige Arbeit 😄

Könnten Sie vielleicht auch ein kleines Reproduktionsprojekt zusammenstellen, um auszuschließen, dass dies durch einen anderen Code als das einfache Navigieren verursacht wird?

Haben Sie dies auch unter iOS versucht und das Gleiche gesehen? Oder nicht auf iOS ausprobiert?

Vielen Dank!

Hey @ z07713! Vielen Dank fĂŒr den Bericht und das HinzufĂŒgen des Videos sowie eine Problemumgehung! Großartige Arbeit 😄

Könnten Sie vielleicht auch ein kleines Reproduktionsprojekt zusammenstellen, um auszuschließen, dass dies durch einen anderen Code als das einfache Navigieren verursacht wird?

Haben Sie dies auch unter iOS versucht und das Gleiche gesehen? Oder nicht auf iOS ausprobiert?

Vielen Dank!

Hey @jfversluis , danke fĂŒr die Antwort, hier ist der Repro, um den Sie gebeten haben: https://drive.google.com/open?id=1WkGh6QwTOP380gX4RrRsksSGBoJNWeuc

Außerdem habe ich dies weder unter IOS ausprobiert, noch habe ich die Möglichkeit dazu. Ich besitze keinen Mac.

Super , danke

Sehen Sie dies auf jeden Fall, danke fĂŒr den Repro.

Es könnte erwÀhnenswert sein, dass die Problemumgehung
protected override bool OnBackButtonPressed() {Current.Navigation.PopAsync(false); return true;}
Funktioniert nur, wenn es im Code hinter AppShell.xaml angewendet wird, und funktioniert nicht, wenn es auf separaten Seiten platziert wird. Ich denke, das bezieht sich auf 7072

Als Arbeitsplatz kann das Überschreiben von OnPopAsync von ShellSection zum Deaktivieren der Animation gezielter sein.

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

@jfversluis fĂŒr mich scheint dies unter iOS (13.3) korrekt zu funktionieren.

Das Deaktivieren der Animation ist fĂŒr uns keine Option und wir haben gerade unsere Veröffentlichung abgeschlossen. Wir mĂŒssen auf 4.3 zurĂŒcksetzen, was schlecht ist, da dadurch einige Fehler, hauptsĂ€chlich in der Shell und im Karussell, wieder geöffnet werden.

Wir werden wahrscheinlich einige Funktionen deaktivieren und ohne sie veröffentlichen mĂŒssen, was traurig ist, wenn man bedenkt, wie lange wir daran gearbeitet haben.

Gibt es eine Problemumgehung außer dem Deaktivieren der Animation?

Gibt es eine Chance, dass dies vor dem 16. Januar gelöst wird? WĂ€re großartig. Vielen Dank.

Beachten Sie, dass die PopModal-Animation das Problem nicht aufweist.

Tut mir leid das @jonx zu hören. Selbst wenn wir es vor dem 16. Januar reparieren wĂŒrden, ist es unwahrscheinlich, dass es Teil eines NuGet sein wird, das wir bis dahin veröffentlichen. Wenn dies etwas ist, das Ihre Veröffentlichung blockiert, wĂŒrde ich nicht auf diese Option wetten. Das tut mir leid.

Es ist okay @jfversluis , ich verstehe, danke fĂŒr deinen Kommentar. Wir mĂŒssen nur unsere Veröffentlichung verzögern.
@ z07713 gibt es eine Möglichkeit fĂŒr Sie, Ihr Beispiel erneut zu teilen. Ich kann nicht mehr auf Ihre Links zugreifen. Ich wĂŒrde gerne sehen, ob es wirklich das gleiche Problem ist, das ich habe, weil ich fĂŒr mich kurz einen anderen Bildschirm meiner App anstelle eines schwarzen Bildschirms sehen kann (im Kontext eines Assistenten; wenn ich die aktuelle Seite einblende, Ich sehe kurz die erste Seite meines Assistenten. Vielen Dank.
@jfversluis hĂ€tten Sie eine Vorstellung davon, welche Änderung in 4.4 dieses Problem eingefĂŒhrt hat? Ich wĂŒrde gerne sehen, ob es eine Möglichkeit gibt, das Problem vorĂŒbergehend zu umgehen. Vielen Dank.

Ich habe auf 4.3.991250 heruntergestuft und habe immer noch das Problem, nur ein bisschen weniger offensichtlich (weil es schneller ist - schneller, nehme ich an). Ich werde weitere Tests durchfĂŒhren, wenn @ z07713 sein Beispiel

@jonx los geht's: https://drive.google.com/open?id=19apVlQS0TafFeBT16aCfzvtvCwcweVgS

Außerdem sind 4.3.0.991211 Formulare installiert: /

Ich habe auch dieses Problem. Ich habe versucht, die Linie zu setzen:
protected override bool OnBackButtonPressed () {Current.Navigation.PopAsync (false); return true; }}
in meiner appShell.xaml.cs und das Blinken ist noch vorhanden. Wenn mir jemand helfen könnte, die Arbeit zu verstehen ... Das wĂ€re großartig!

Wir haben auch das gleiche Problem, es ist ziemlich Àrgerlich, wenn Sie die Shell mit Animationen verwenden möchten. : |

Ich habe auch das gleiche Problem, und auch die Problemumgehung hat bei mir nicht funktioniert. Ich habe das Feedback von den Benutzern erhalten, dass dies ziemlich unangenehm aussieht, daher mĂŒssen wir die EinfĂŒhrung unserer App verzögern, bis dies behoben ist.

Wann wird der Fehler behoben?

Ich habe das gleiche Problem in Windows UWP, wenn ich mit Navigation.PushAsyc(<Page Object>,false) zur Inhaltsseite navigiere

Irgendeine Problemumgehung dafĂŒr?

@jfversluis irgendein Update dazu?

@ z07713 Ich fĂŒrchte noch nicht, sorry! Haben Sie zufĂ€llig neue Erkenntnisse darĂŒber entdeckt, die uns helfen könnten?

Das Xamarin-Team lĂ€sst also ein flackerndes Problem, das UX absolut zerstört, monatelang im Repo sein. Das ist verrĂŒckt fĂŒr mich. Ich bin derzeit mit diesem Problem konfrontiert und bedauere, dass ich nicht einheimisch geworden bin, da ich beim Navigieren in meiner eigenen App Kopfschmerzen bekomme.

@jfversluis Ich habe einige Tests durchgefĂŒhrt, hoffe, das hilft euch dabei, den Fehler zu finden:

FĂŒr die Reproduktion habe ich die Standardvorlage von Visual Studio verwendet, die Xamarin Forms 4.3.0.908675 verwendet
Ich habe den Code nicht geÀndert. Kein Flackern in der Standardvorlagen-App.

Danach habe ich das Xamarin Forms-Paket auf 4.3.0.947036 aktualisiert
Keine Änderungen am Code. Das Flackern erscheint nicht im Emulator, sondern nur auf einem echten Android-GerĂ€t (in meinem Fall Samsung Galaxy A40), es erscheint auch nicht auf iOS Simulator oder iPhone 8.

Es muss also eine Änderung zwischen diesen beiden Versionen geben, die das Flackern verursacht.

Genial! @AndreasLichtsinn

@jfversluis Das einzige, was es zu erwÀhnen gilt, ist, dass wir die Verwendung von Shell aus diesem Grund komplett eingestellt haben: /

Vielen Dank fĂŒr Ihre Untersuchung zu diesem @AndreasLichtsinn! Sehr wertvolle Informationen :)

Eine weitere Sache habe ich fĂŒr das Blink-Problem gefunden.
Wenn ich eine Shell-App mit der Vorlage erstelle und die Navigation (im Code hinter der ItemsPage) von "Navigation.PushAsync (new ItemDetailPage ())" in "Shell.Current.GoToAsync (" itemDetailPage ", false) Ă€ndere ", dann sehe ich das Blinken auf dem Android-GerĂ€t. Ich habe dies auf den Originalversionen 4.3.xxx und 4.5.xxx von Xamarin.Forms ĂŒberprĂŒft.

Um ehrlich zu sein, obwohl es einige Navigationsprobleme bei der Shell-Navigation gibt (wie die einzige Navigation von Seite zu Seite, den Parameter-Pass usw.), blockiert dieser Fehler tatsÀchlich meine Version und macht Shell völlig unbrauchbar. Also bitte den Fehler so schnell wie möglich beheben !!!

Guten Morgen, ich habe die gleichen Probleme wie oben beschrieben. Ich wĂŒrde gerne wissen, ob eine Lösung in Sicht ist.

Gleiche Probleme hier. Das Deaktivieren der Animation sehe ich nicht wirklich als Problemumgehung an, zumal es mit dem Back Button Pop keine einfache Möglichkeit gibt, dies zu tun.

Ich hoffe das wird schnell behoben!

Ich kann bestÀtigen, dass in Version 4.3.0.90867 kein Blinken auftritt.

Die obige Version wurde nicht getestet, das Problem besteht jedoch weiterhin in Version 4.5.0.356

Das Problem besteht in der letzten stabilen Version weiterhin.

Gleiche Probleme hier. Das Deaktivieren der Animation sehe ich nicht wirklich als Problemumgehung an, zumal es mit dem Back Button Pop keine einfache Möglichkeit gibt, dies zu tun.

Ich hoffe das wird schnell behoben!

@kevinjpetersen Dies wird nur passieren, wenn Sie es so

dein bestes schnell! Das Problem besteht darin, die Ergebnisse von Version 4.3.0.90867 auszuprobieren.

Weitere Informationen: Der Fehler wird in diesem Commit eingefĂŒhrt: https://github.com/xamarin/Xamarin.Forms/commit/2b4ccdc88f8db7a2a0b78a1adf3428125eb677b5

Es sieht so aus, als wĂŒrde ich diese Zeile auskommentieren:
https://github.com/xamarin/Xamarin.Forms/blob/1532d46f5fb6f219594015b80f8e5a2476512882/Xamarin.Forms.Core/Shell/ShellSection.cs#L499
dann gibt es kein blinken.

Jemand könnte das untersuchen, der mehr Erfahrung hat als ich ...

Ich habe dies getestet und wenn ich zuerst die Seite entferne und dann die Navigation aufrufe, ist es in Ordnung - kein Blinken.

Also hier: https://github.com/xamarin/Xamarin.Forms/blob/1532d46f5fb6f219594015b80f8e5a2476512882/Xamarin.Forms.Core/Shell/ShellSection.cs#L600

Ändere das:

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

dazu:

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

@tdamir sehr guter Fund!

Wenn Sie angeben , dass Ihre Feststellung ist , besteht das Problem darin, dass args.Task erwartet wird, was wahrscheinlich auf einen Kontextwechsel von UI-Thread-UI zurĂŒckzufĂŒhren ist.

Die Aufgabe wird immer erwartet

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

obwohl auf Android das args.Task in dieser Methode immer ein Task.FromResult(...)
https://github.com/xamarin/Xamarin.Forms/blob/7a52542d50797ccc69ae1d8dd84259190d96bdb4/Xamarin.Forms.Platform.Android/Renderers/ShellItemRendererBase.cs#L134
aber denke, ein gefundener wahrscheinlicherer Schuldiger
https://github.com/xamarin/Xamarin.Forms/blob/7a52542d50797ccc69ae1d8dd84259190d96bdb4/Xamarin.Forms.Platform.Android/Renderers/ShellItemRendererBase.cs#L252 -L259

es Àndert die Hintergrundfarbe bei der Navigation (nicht sicher, ob immer)! Warum?

Es scheint auch, dass das Blinken nur in einem Tab auftritt.

Es gibt viel zu testen.

Tolle Arbeit @tdamir und @ahmedalejo! :) :)

@ahmedalejo Coole Fidings! Ich möchte nur sagen, dass es nicht nur Tabs sind. Ich habe das gleiche Flackern und alles, was ich habe, ist dies in meiner AppShell (auch bekannt als no 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 Ja, der Farbwechselteil ist komisch, aber wenn ich ihn entferne, blinkt er immer noch.

Es sieht so aus, als ob https://github.com/xamarin/Xamarin.Forms/blob/1532d46f5fb6f219594015b80f8e5a2476512882/Xamarin.Forms.Core/Shell/ShellSection.cs#L499 vor dem Navigieren aufgerufen werden muss.

Hallo @PureWeen und @rmarinho

HĂ€tten Sie eine Idee, warum Sie unten SendAppearanceChange() anrufen?
https://github.com/xamarin/Xamarin.Forms/blob/1532d46f5fb6f219594015b80f8e5a2476512882/Xamarin.Forms.Core/Shell/ShellSection.cs#L499

lÀsst das Knallen blinken?

Könnte jemand eine Problemumgehung empfehlen?

Die Lösung mit

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

funktioniert nicht.

Ich habe die Problemumgehung gefunden (danke an 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); 
        }
    }

Verwenden Sie dann das CustomTab in XAML.

Das folgende Update funktioniert nur mit der Hardware-Navigationstaste (und nicht in anderen FĂ€llen der RĂŒcknavigation):

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

Danke @pfedotovsky Ich hatte eine Ahnung, dass es auch mit der Tab-Navigation zu tun haben könnte.

Das passiert uns auch, seit 4.3 gibt es das Flimmern auf Android.

Ich habe gerade festgestellt, dass dieser Fehler anlÀsslich des einjÀhrigen JubilÀums der [Shell] -Navigation auftritt - flackert # 5755

Das gleiche Problem hier beim Goback, flackernder Bildschirm.

Zum Beispiel:
https://github.com/mallibone/ShellLoginSample

Vielen Dank fĂŒr die Erkundung @ahmedalejo, die es sehr einfach gemacht hat, diese zu finden und zu reparieren

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

Sobald der Build abgeschlossen ist, wenn jemand die Nugets testen möchte und mich wissen lÀsst, ob das Problem behoben ist, wÀre dies hilfreich

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

Ich habe das Nuget mit der Xaminals-Probe getestet

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

Und mit diesem Nuget tritt das Flackern nicht mehr auf

@PureWeen Ok, also habe ich einen Test gemacht:

Ich habe eine neue Shell-Beispiel-App mit Xamarin Forms 4.3.0.908675 erstellt -> Kein Flackern
Dann habe ich auf den neuesten stabilen 4.5.0.495 aktualisiert -> Flackern
Dann habe ich auf Ihre neueste Version 4.6.0.1693 aktualisiert -> Kein Flackern

Gute Arbeit! Ich hoffe, andere können dies bestÀtigen.

@PureWeen Ok, also habe ich einen Test gemacht:

Ich habe eine neue Shell-Beispiel-App mit Xamarin Forms 4.3.0.908675 erstellt -> Kein Flackern
Dann habe ich auf den neuesten stabilen 4.5.0.495 aktualisiert -> Flackern
Dann habe ich auf Ihre neueste Version 4.6.0.1693 aktualisiert -> Kein Flackern

Gute Arbeit! Ich hoffe, andere können dies bestÀtigen.

@AndreasLichtsinn kann Xamarin Forms 4.6.0.1693 nicht finden

@PureWeen Ok, also habe ich einen Test gemacht:

Ich habe eine neue Shell-Beispiel-App mit Xamarin Forms 4.3.0.908675 erstellt -> Kein Flackern
Dann habe ich auf den neuesten stabilen 4.5.0.495 aktualisiert -> Flackern
Dann habe ich auf Ihre neueste Version 4.6.0.1693 aktualisiert -> Kein Flackern

Gute Arbeit! Ich hoffe, andere können dies bestÀtigen.

@AndreasLichtsinn Ich kann den 1693 Build auch nicht finden! Auch die 4.7.0.531-Nacht flackert noch: /

@angelru @RsZoli Es ist in den veröffentlichten Artefakten, die PureWeen gepostet hat
image

@angelru Danke fĂŒrs Testen !!!!

@angelru Danke fĂŒrs Testen !!!!

@PureWeen Ich konnte nicht testen, ich kann nicht herunterladen

Oh du hast @AndreasLichtsinn zitiert :-)

Danke @AndreasLichtsinn fĂŒrs Testen !!!

@angelru
Zum Link gehen:
https://dev.azure.com/xamarin/public/_build/results?buildId=16155&view=results
Klicke hier:
image
Dann hier:
image
Entpacken Sie dann die Zip-Datei und erstellen Sie eine lokale Nuget-Paketquelle in diesem Ordner:
image
WĂ€hlen Sie dann diese lokale Paketquelle und installieren Sie sie von dort:
image

@angelru
Zum Link gehen:
https://dev.azure.com/xamarin/public/_build/results?buildId=16155&view=results
Klicke hier:
image
Dann hier:
image
Entpacken Sie dann die Zip-Datei und erstellen Sie eine lokale Nuget-Paketquelle in diesem Ordner:
image
WĂ€hlen Sie dann diese lokale Paketquelle und installieren Sie sie von dort:
image

Vielen Dank!!! Es klappt!

Ich kann bestÀtigen, dass Xamarin Forms 4.6.0.1693 kein Flimmern aufweist.

Vielen Dank!

geschlossen von # 10158

Ich habe das gleiche Problem mit den neuesten Xamarin-Formularen 4.8. Ich habe festgestellt, dass unter iOS die Seiten mit Beschriftungen mit TextType = 'Html' das Problem verursachen ...

Ich habe eine neue Ausgabe eröffnet. # 12385

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

joseluisct picture joseluisct  Â·  3Kommentare

simontocknell picture simontocknell  Â·  3Kommentare

AppGrate picture AppGrate  Â·  3Kommentare

Papirosnik picture Papirosnik  Â·  3Kommentare

deakjahn picture deakjahn  Â·  3Kommentare