Xamarin.forms: [Bug] Aplikasi Shell berkedip-kedip di navigasi belakang

Dibuat pada 20 Nov 2019  ·  58Komentar  ·  Sumber: xamarin/Xamarin.Forms

Deskripsi

Animasi navigasi berkedip-kedip, menampilkan sekilas layar hitam saat menavigasi kembali di aplikasi Shell.

Langkah-langkah untuk Mereproduksi

Menavigasi kembali.

Perilaku yang Diharapkan

Jangan berkedip.

Perilaku Sebenarnya

Kerlip.

Informasi dasar

  • Versi dengan masalah:
  • Versi bagus terakhir yang diketahui:
  • IDE: VS 2019 16.3.9
  • Kerangka Kerja Target Platform:

    • iOS: t / a

    • Android: 9.0

    • UWP: tidak ada

  • Versi Pustaka Dukungan Android:
  • Paket Nuget:
  • Perangkat yang Terkena Dampak: Samsung Galaxy S8, S10

Screenshot

Video gerakan lambat dari masalah ini: https://i.imgur.com/bWAVzgY.mp4

Tautan Reproduksi

shell 3 in-progress Android bug

Komentar yang paling membantu

Saya menguji nuget dengan sampel xaminals

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

Dan dengan nuget ini kedipan tidak lagi terjadi

Semua 58 komentar

Solusi sementara, jika Anda melakukan penggantian, tanpa animasi tidak akan ada kedipan!

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

Hai @ z07713! Terima kasih telah melaporkan dan menambahkan video serta solusinya! Kerja bagus 😄

Apakah Anda kebetulan juga dapat menyusun proyek reproduksi kecil untuk mengesampingkan bahwa ini disebabkan oleh kode lain selain hanya menavigasi?

Juga, apakah Anda mencoba ini di iOS dan melihat hal yang sama? Atau belum mencoba di iOS?

Terima kasih!

Hai @ z07713! Terima kasih telah melaporkan dan menambahkan video serta solusinya! Kerja bagus 😄

Apakah Anda kebetulan juga dapat menyusun proyek reproduksi kecil untuk mengesampingkan bahwa ini disebabkan oleh kode lain selain hanya menavigasi?

Juga, apakah Anda mencoba ini di iOS dan melihat hal yang sama? Atau belum mencoba di iOS?

Terima kasih!

Hai @jfversluis , terima kasih atas balasannya, ini repro yang Anda minta: https://drive.google.com/open?id=1WkGh6QwTOP380gX4RrRsksSGBoJNWeuc

Juga, saya belum mencoba ini di iOS atau saya tidak memiliki kemampuan untuk melakukannya, saya tidak memiliki Mac.

Luar biasa, terima kasih @ z07713 !

Pasti melihat ini terjadi, terima kasih atas tegurannya.

Mungkin perlu dicatat bahwa solusinya
protected override bool OnBackButtonPressed() {Current.Navigation.PopAsync(false); return true;}
Hanya berfungsi ketika diterapkan di dalam kode di belakang AppShell.xaml dan tidak berfungsi ketika ditempatkan di halaman terpisah. Saya rasa ini berhubungan dengan 7072

Sebagai tempat kerja, menimpa OnPopAsync dari ShellSection untuk menonaktifkan animasi mungkin lebih bertarget.

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

@jfversluis bagi saya ini tampaknya berfungsi dengan benar di iOS (13.3).

Menonaktifkan animasi bukanlah pilihan bagi kami dan kami baru saja menyelesaikan rilis kami. Kami harus mengembalikan ke 4.3 yang buruk karena akan membuka kembali beberapa bug sebagian besar di shell dan carousel.

Kami mungkin harus menonaktifkan beberapa fitur dan merilis tanpa mereka yang menyedihkan mengingat berapa lama kami mengerjakannya.

Apakah ada solusi selain menonaktifkan animasi?

Adakah kemungkinan masalah ini diselesaikan sebelum 16 Januari? Akan menjadi hebat. Terima kasih.

Catatan, animasi PopModal tidak memiliki masalah.

Maaf mendengar @jonx itu. Bahkan jika kami memperbaikinya sebelum 16 Jan, kecil kemungkinannya itu akan menjadi bagian dari NuGet yang kami rilis sebelum itu. Jika ini adalah sesuatu yang menghalangi rilis Anda, saya tidak akan bertaruh pada opsi itu. Maaf soal itu.

Tidak apa-apa @jfversluis , saya mengerti, terima kasih atas komentar Anda. Kami hanya harus menunda pembebasan kami.
@ z07713 adakah cara bagi Anda untuk membagikan sampel lagi, saya tidak dapat mengakses tautan Anda lagi. Saya ingin melihat apakah itu benar-benar masalah yang sama dengan yang saya alami karena bagi saya, saya dapat melihat secara singkat layar lain dari aplikasi saya, bukan layar hitam (dalam konteks wizard; ketika saya membuka halaman saat ini, Saya melihat halaman pertama penyihir saya secara singkat). Terima kasih.
@jfversluis, apakah Anda punya ide tentang perubahan apa di 4.4 yang menyebabkan masalah ini? Saya ingin melihat apakah ada cara untuk mengatasi masalah tersebut untuk sementara. Terima kasih.

Saya menurunkan versi ke 4.3.991250 dan saya sebenarnya masih memiliki masalah, hanya sedikit kurang jelas (karena lebih cepat - lebih cepat, saya kira). Saya akan melakukan lebih banyak tes jika @ z07713 dapat membagikan contohnya ...

@jonx ini dia: https://drive.google.com/open?id=19apVlQS0TafFeBT16aCfzvtvCwcweVgS

juga, memiliki 4.3.0.991211 Formulir yang diinstal: /

Saya mengalami masalah ini juga. Saya telah mencoba meletakkan garis:
dilindungi override bool OnBackButtonPressed () {Current.Navigation.PopAsync (false); kembali benar; }
di appShell.xaml.cs saya dan Flashing masih ada. Jika seseorang dapat membantu saya memahami pekerjaan di sekitar ... Itu akan luar biasa!

Kami juga memiliki masalah yang sama, cukup mengganggu, jika Anda ingin menggunakan shell dengan animasi. : |

Saya juga memiliki masalah yang sama, dan solusi tersebut tidak berhasil untuk saya. Saya mendapat umpan balik dari pengguna bahwa ini terlihat sangat buruk, jadi kami harus menunda peluncuran aplikasi kami sampai ini diperbaiki.

kapan kesalahan diperbaiki?

Saya menghadapi masalah yang sama di Windows UWP saat Menavigasi ke Halaman Konten menggunakan Navigation.PushAsyc(<Page Object>,false)

Ada solusi untuk itu?

@jfversluis ada pembaruan tentang ini?

@ z07713 Saya khawatir, belum, maaf! Apakah Anda kebetulan menemukan temuan baru tentang ini yang dapat membantu kami?

Jadi tim Xamarin membiarkan masalah berkedip yang benar-benar menghancurkan UX berada di repo selama berbulan-bulan. Ini gila bagiku. Saat ini menghadapi masalah ini dan saya menyesal tidak menjadi asli karena saya pusing menavigasi aplikasi saya sendiri.

@jfversluis Saya melakukan beberapa tes, semoga ini membantu kalian untuk menemukan bug:

Untuk reproduksi saya menggunakan Visual Studio Template standar yang menggunakan Xamarin Forms 4.3.0.908675
Saya tidak melakukan perubahan pada kode. Tidak ada kedipan di aplikasi template standar.

Setelah itu, saya mengupgrade paket Xamarin Forms menjadi 4.3.0.947036
Tidak ada perubahan pada kode. Kedipan tidak muncul di Emulator, hanya di perangkat Android asli (dalam kasus saya Samsung Galaxy A40), itu juga tidak muncul di iOS Simulator atau iPhone 8.

Jadi harus ada perubahan antara dua versi ini yang menyebabkan kedipan.

Hebat! @Rumahsakitotak

@jfversluis Satu-satunya hal yang perlu disebutkan adalah, bahwa kami benar-benar berhenti menggunakan shell karena ini: /

Terima kasih atas penyelidikan Anda tentang @AndreasLichtsinn ini! Informasi yang sangat berharga :)

Satu hal lagi yang saya temukan untuk masalah kedip.
Saat saya membuat aplikasi Shell dengan template, jika saya mengubah navigasi (dalam kode di belakang ItemsPage) dari "Navigation.PushAsync (new ItemDetailPage ())" menjadi "Shell.Current.GoToAsync (" itemDetailPage ", false) ", maka saya akan melihat kedip di perangkat Android. Saya telah memeriksa ini di 4.3.xxx asli dan versi 4.5.xxx terbaru dari Xamarin.Forms.

Sejujurnya, meskipun ada beberapa masalah navigasi pada navigasi Shell (seperti satu-satunya navigasi Page to Page, Parameter pass, dll ...), bug ini sebenarnya memblokir rilis saya, dan itu akan membuat Shell tidak dapat digunakan sepenuhnya. Jadi tolong perbaiki bugnya secepat mungkin !!!

Selamat pagi, saya memiliki masalah yang sama seperti yang dijelaskan di atas. Saya ingin tahu apakah ada solusi yang terlihat?

Masalah yang sama di sini. Menonaktifkan animasi Saya tidak benar-benar melihat sebagai solusi, terutama karena tidak ada cara mudah untuk melakukannya dengan Pop Tombol Kembali.

Saya harap ini akan diperbaiki dengan cepat!

Saya dapat mengonfirmasi bahwa tidak ada kedipan di versi 4.3.0.90867.

Tidak menguji versi di atas, namun masalahnya masih ada di versi 4.5.0.356

Masalahnya masih berlanjut di versi stabil terakhir.

Masalah yang sama di sini. Menonaktifkan animasi Saya tidak benar-benar melihat sebagai solusi, terutama karena tidak ada cara mudah untuk melakukannya dengan Pop Tombol Kembali.

Saya harap ini akan diperbaiki dengan cepat!

@kevinjpetersen ini hanya akan terjadi jika Anda dapat memperbaikinya secepatnya. Sudah buka sejak pertengahan November tahun lalu.

puasa terbaikmu! memperbaikinya adalah mencoba temuan @tdamir dengan v 4.3.0.90867.

Beberapa info lebih lanjut: bug diperkenalkan dalam komit ini: https://github.com/xamarin/Xamarin.Forms/commit/2b4ccdc88f8db7a2a0b78a1adf3428125eb677b5

Sepertinya jika saya mengomentari baris ini:
https://github.com/xamarin/Xamarin.Forms/blob/1532d46f5fb6f219594015b80f8e5a2476512882/Xamarin.Forms.Core/Shell/ShellSection.cs#L499
maka tidak ada kedipan.

Seseorang dapat melihat ini yang memiliki lebih banyak pengalaman daripada saya ...

Saya men-debug ini dan jika saya menghapus halaman terlebih dahulu dan kemudian memanggil navigasi, maka akan baik-baik saja - tidak berkedip.

Jadi di sini: https://github.com/xamarin/Xamarin.Forms/blob/1532d46f5fb6f219594015b80f8e5a2476512882/Xamarin.Forms.Core/Shell/ShellSection.cs#L600

Ubah ini:

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

untuk ini:

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

@tdamir sangat bagus ditemukan!

Memberikan temuan Anda @tdamir akurat, masalahnya adalah ketika args.Task ditunggu mungkin disebabkan karena peralihan konteks dari UI-Thread-UI.

Tugas selalu ditunggu

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

meskipun di android args.Task dalam metode ini selalu Task.FromResult(...)
https://github.com/xamarin/Xamarin.Forms/blob/7a52542d50797ccc69ae1d8dd84259190d96bdb4/Xamarin.Forms.Platform.Android/Renderers/ShellItemRendererBase.cs#L134
tapi pikirkan bahwa menemukan pelakunya yang lebih mungkin
https://github.com/xamarin/Xamarin.Forms/blob/7a52542d50797ccc69ae1d8dd84259190d96bdb4/Xamarin.Forms.Platform.Android/Renderers/ShellItemRendererBase.cs#L252 -L259

itu mengubah warna latar belakang saat navigasi (tidak yakin apakah selalu)! Mengapa?

Tampaknya kedipan hanya terjadi saat berada di dalam tab.

Banyak pengujian yang harus dilakukan.

Kerja bagus @tdamir dan @ahmedalejo! :)

@ahmedalejo Keren fidings! Hanya ingin meletakkan ini di luar sana, yang menurut saya bukan hanya tab. Saya memiliki kedipan yang sama, dan yang saya miliki hanyalah ini di AppShell saya (alias. 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 Iya, bagian ganti warnanya aneh tapi kalau saya keluarkan masih berkedip.

Sepertinya https://github.com/xamarin/Xamarin.Forms/blob/1532d46f5fb6f219594015b80f8e5a2476512882/Xamarin.Forms.Core/Shell/ShellSection.cs#L499 harus dipanggil sebelum menavigasi.

Hai @PureWeen dan @rmarinho

apakah Anda tahu mengapa memanggil SendAppearanceChange() bawah
https://github.com/xamarin/Xamarin.Forms/blob/1532d46f5fb6f219594015b80f8e5a2476512882/Xamarin.Forms.Core/Shell/ShellSection.cs#L499

menyebabkan poping berkedip?

Bisakah seseorang memberi nasihat tentang solusi?

Solusinya dengan

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

tidak bekerja.

Saya telah menemukan solusinya (terima kasih kepada 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); 
        }
    }

Dan kemudian gunakan CustomTab di XAML.

Perbaikan di bawah ini hanya berfungsi dengan navigasi tombol kembali perangkat keras (dan tidak berfungsi dalam kasus navigasi belakang lainnya):

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

Terima kasih @pfedotovsky saya punya firasat itu mungkin ada hubungannya dengan navigasi tab juga.

Terjadi pada kami juga, sejak 4.3 flicker telah ada di Android.

Baru saja menemukan bug ini pada peringatan satu tahun navigasi [Shell] - berkedip-kedip # 5755

Masalah yang sama di sini saat goback, layar berkedip.

Sebagai contoh:
https://github.com/mallibone/ShellLoginSample

Terima kasih atas eksplorasi @ahmedalejo yang membuat yang ini sangat mudah dilacak dan diperbaiki

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

Setelah pembangunan selesai, jika ada yang ingin menguji nugets dan beri tahu saya jika masalah teratasi, itu akan membantu

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

Saya menguji nuget dengan sampel xaminals

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

Dan dengan nuget ini kedipan tidak lagi terjadi

@PureWeen Ok jadi saya melakukan tes:

Saya membuat Aplikasi Sampel Shell baru dengan Formulir Xamarin 4.3.0.908675 -> Tanpa kedipan
Kemudian saya memperbarui ke versi stabil terbaru 4.5.0.495 -> Flickering
Kemudian saya memperbarui ke rilis terbaru Anda 4.6.0.1693 -> Tidak berkedip

Kerja bagus! Semoga orang lain bisa mengkonfirmasi ini.

@PureWeen Ok jadi saya melakukan tes:

Saya membuat Aplikasi Sampel Shell baru dengan Formulir Xamarin 4.3.0.908675 -> Tanpa kedipan
Kemudian saya memperbarui ke versi stabil terbaru 4.5.0.495 -> Flickering
Kemudian saya memperbarui ke rilis terbaru Anda 4.6.0.1693 -> Tidak berkedip

Kerja bagus! Semoga orang lain bisa mengkonfirmasi ini.

@AndreasLichtsinn tidak dapat menemukan Formulir Xamarin 4.6.0.1693

@PureWeen Ok jadi saya melakukan tes:

Saya membuat Aplikasi Sampel Shell baru dengan Formulir Xamarin 4.3.0.908675 -> Tanpa kedipan
Kemudian saya memperbarui ke versi stabil terbaru 4.5.0.495 -> Flickering
Kemudian saya memperbarui ke rilis terbaru Anda 4.6.0.1693 -> Tidak berkedip

Kerja bagus! Semoga orang lain bisa mengkonfirmasi ini.

@AndreasLichtsinn saya juga tidak dapat menemukan versi 1693! Juga, film 4.7.0.531-nightly berkedip: /

@angelru @RsZoli Ada dalam artefak terbitan yang diposkan PureWeen
image

@angelru Terima kasih telah menguji !!!!

@angelru Terima kasih telah menguji !!!!

@ PureWeen Saya tidak dapat menguji, saya tidak dapat mengunduh

Oh, Anda mengutip @AndreasLichtsinn :-)

Terima kasih @AndreasLichtsinn untuk pengujian !!!

@angel
Pergi ke link:
https://dev.azure.com/xamarin/public/_build/results?buildId=16155&view=results
Klik disini:
image
Lalu di sini:
image
Kemudian ekstrak zip dan buat sumber paket nuget lokal ke folder ini:
image
Kemudian pilih sumber paket lokal ini dan instal dari sana:
image

@angel
Pergi ke link:
https://dev.azure.com/xamarin/public/_build/results?buildId=16155&view=results
Klik disini:
image
Lalu di sini:
image
Kemudian ekstrak zip dan buat sumber paket nuget lokal ke folder ini:
image
Kemudian pilih sumber paket lokal ini dan instal dari sana:
image

Terima kasih banyak!!! berhasil!

Saya dapat mengonfirmasi bahwa tidak ada flicker dalam Xamarin Forms 4.6.0.1693.

Terima kasih!

ditutup oleh # 10158

Saya memiliki masalah yang sama dengan Xamarin bentuk 4.8 terbaru. Saya mengidentifikasi bahwa pada iOS halaman yang memiliki label dengan TextType = 'Html' menyebabkan masalah ...

Saya membuka edisi baru. # 12385

Apakah halaman ini membantu?
0 / 5 - 0 peringkat