Производительность Xamarin TabbedPage при использовании Children.Add - PullRequest
0 голосов
/ 30 августа 2018

Добрый день, У меня есть вопрос, касающийся производительности страницы с вкладками и существует ли более эффективный способ загрузки вкладок на страницу, без потери кадров или процесса. Что касается этой проблемы, у меня было несколько проблем с TabbedPage в Xamarin.Forms. Мой проект в настоящее время состоит из Listview с 104 компонентами. Когда я нажимаю на один из элементов, он открывает страницу с вкладками, состоящую из 3 страниц с вкладками. Я запускаю страницу с вкладками, используя следующий код

 int Clicked = 0;
 public async Task CheckClick(Page data)
 {
             Clicked += 1;
             if (Clicked == 1)
             {
                 await Navigation.PushAsync(data);
                 List_View.SelectedItem = null;
             }
 }
 public async void OnSelection(object sender, SelectedItemChangedEventArgs e)
 {
             if (e.SelectedItem == null)
             {
                 return;
             }
             var Cell = e.SelectedItem as DataSource;
             switch (Cell.ID)
             {
                 case 0:
                     await CheckClick(new Function_One());
                     break;
        }
 }

Реальная проблема возникает после того, буду ли я предварительно загружать информацию заранее или делаю что-нибудь, когда бы я ни звонил Children.Add (data); все приложение зависает на 1 или 2 секунды, после чего страница загружается. Код выглядит следующим образом.

public class Function_One : TabbedPage
 {
    private async Task Test()
    {
                //
                var data = new NewPageData("", "", "OP.png", "Persian.png", Description, Usage, Storage, Data);
                var data2 = new NewMedicalPage(Medical_Info, Translation, startinfo);
                var data3 = new NewNotePage("", 0);
                data.Icon = "Info.png";
                await Task.Delay(100);// Little await to load the page first before hang
                Device.BeginInvokeOnMainThread(async () =
                {
                    Children.Add(data);// HERE is the freeze
                    Children.Add(data2);// these
                    Children.Add(data3);// 3 (Adding of the Tabs)
                });
    }
    public void UpdateData()
    {
                Task.Run(async () =
                {
                    try
                    {
                        Description.Spans.Add(new Span
                        {
                            Text = "Data.... ",
                            FontSize = 18,
                            FontFamily = variables.fontFamily
                        });
                        Usage.Spans.Add(new Span
                        {
                            Text = "MoreData...",
                            FontSize = 18,
                            FontFamily = variables.fontFamily
                        });
                        Storage.Spans.Add(new Span
                     {
                         Text = "LastData...",
                         FontSize = 18,
                         FontFamily = variables.fontFamily
                     });
                     await Test();
                 }
                 catch { }
             }).ConfigureAwait(false);
    }
    public Function_One()
    {
            UpdateData();
                BarBackgroundColor = MainColor;
                BarTextColor = Color.WhiteSmoke;
                Title = "Page";
    }
 }

ПРИМЕЧАНИЕ: (Этот проект полностью автономный, Интернет не требуется)

Если бы кто-нибудь мог объяснить мне лучший способ загрузки данных при сохранении плавности и плавности работы приложения, это было бы полезно. Данные не должны загружаться все сразу, так как страница открывается, как только она нажата!

...