对于Xamarin Forms应用程序,我应该如何确定App构造函数或OnStart()中的内容?

时间:2019-02-11 13:05:45

标签: xamarin xamarin.forms

这是我拥有的代码:

    public App()
    {
        InitializeComponent();
        DB.CreateTables();
        DB.GetSettings();
        DB.PopulateTables();
        SetResourceColors();
        SetResourceDimensions();
        MainPage = new MainPage();
        activity = Helpers.Activity.Create();
        VersionTracking.Track();
        DeviceDisplay.MainDisplayInfoChanged += OnMainDisplayInfoChanged;
    }

    protected override void OnStart()
    {


    }

有人可以向我解释。我将代码放置在构造函数或OnStart()方法之间是否有区别?正常的做法是什么?

2 个答案:

答案 0 :(得分:3)

Please go through the details here

您可以在App()构造函数中编写初始化代码。但是在注册事件时您需要非常小心。

原因是

例如,在Android中,如果已启动该应用程序且该应用程序在任务列表中,并且您尝试通过单击应用程序图标再次尝试启动该应用程序。 App()的构造函数将再次调用。这将多次注册该事件,并会产生问题。

因此对于事件,我建议您使用替代方法注册事件。

再次如Jason指出的那样,编写代码是您个人的喜好。

答案 1 :(得分:3)

我已经和Xamarin.Forms合作很久了,这就是我和我的开发人员使用OnStart方法的原因!

如果您查看Microsoft文档,则会显示以下内容:

  

OnStart-在应用程序启动时调用。

因此,首先,您应该知道OnStart方法没有特定用途,说实话,使用构造函数或此生命周期方法之间没有重大区别,因为两者都被调用XF框架启动,首先是构造函数,然后是OnStart方法。

现在让我们来探讨差异,

现在,正如Jason所指出的那样,OnStart方法是生命周期方法,因此它的返回类型与构造函数不同,因此您甚至可以在{{1 }}方法,但您不能在构造函数中执行相同的操作,因为构造函数不能异步。

这表示您是否具有以下方法:

OnStart

现在,由于构造函数强制同步且没有返回类型,因此无法从构造函数异步调用此方法。但是,如果尝试从on start方法执行此操作非常简单,那么它将起作用,在这种情况下,请使用OnStart方法。如下所示:

public async Task<bool> IsSomeThingWorkingAsync(//SomeParams)
{
 // Code 
}

构造函数旨在用于接线。在构造函数中,您要避免进行实际工作。您基本上准备了要使用的类。方法旨在完成实际工作。

注意: 选择一个选项并不会带来任何性能提升,这实际上是一个优先选择的问题。