首页 > 解决方案 > 使用 Children.Add 时的 Xamarin TabbedPage 性能

问题描述

下午好,我有一个关于标签页性能的问题,以及是否有更有效的方法将标签加载到页面中,而不会丢失任何帧或进程挂起。关于这个问题,我在 Xamarin.Forms 中遇到了一些关于 TabbedPage 的问题。我的项目目前由一个包含 104 个组件的 Listview 组成。当我单击其中一个项目时,它会打开一个由 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";
    }
 }

注意:(本项目完全是离线项目,无需网络)

如果有人可以向我解释一种更好的方法来加载数据,同时保持应用程序流畅和流畅,那将不胜感激。数据不必一次全部加载,只要页面一点击就打开!

标签: xamarinmobilexamarin.formsxamarin.iosxamarin.android

解决方案


推荐阅读