在Xamarin Forms Project中的OnAppearing方法中调用InitializeComponent

时间:2018-03-03 13:56:34

标签: xamarin xamarin.forms xamarin.android

是否有任何原因或问题我无法在xamarin表单项目中的页面的OnAppearing函数中调用InitializeComponent方法? 我知道我必须只调用一次InitializeComponent来创建实际的页面。但是,如果我检查内容已经创建并按以下方式执行,该怎么办?这是一个糟糕的实施或实践?因为据说没有基于xaml的应用程序可以执行它并且始终在页面的构造函数中调用它。

我想这样做的原因如下,因为xamarin.forms启动时间在Android上运行缓慢,如果你使用Masterdetail页面(我认为相同的选项卡页面),你必须在启动时初始化它,它会导致每一个masterdetail页面中定义的导航页面将被初始化,并且根据您的UI,您需要花费2-3秒才能获得更高的成本。对此有何想法或经验?

protected override void OnAppearing()
 {    
   if (Content == null)
    {
     InitializeComponent();
    }
}

1 个答案:

答案 0 :(得分:0)

我不推荐这种方法。来自xamarin文档。

该类的构造函数调用InitializeComponent,然后调用LoadFromXaml方法从PCL中提取XAML文件(或其编译的二进制文件)。 LoadFromXaml初始化XAML文件中定义的所有对象,在父子关系中将它们连接在一起,将代码中定义的事件处理程序附加到XAML文件中设置的事件,并将生成的对象树设置为页面的内容。 / p>

https://developer.xamarin.com/guides/xamarin-forms/xaml/xaml-basics/getting_started_with_xaml/

如果您的表单在Android上太慢,我会启用快速渲染

在主要活动的OnCreate中,在Xamarin.Forms.Init之前添加这行代码

Forms.SetFlags("FastRenderers_Experimental");

https://xamarinhelp.com/xamarin-forms-fastrenderers-android/

尝试使用已编译的Xaml也不会有什么坏处

using Xamarin.Forms.Xaml;
...
[XamlCompilation (XamlCompilationOptions.Compile)]
public class HomePage : ContentPage
{

https://developer.xamarin.com/guides/xamarin-forms/xaml/xamlc/