这是我拥有的代码:
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()方法之间是否有区别?正常的做法是什么?
答案 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
}
构造函数旨在用于接线。在构造函数中,您要避免进行实际工作。您基本上准备了要使用的类。方法旨在完成实际工作。
注意: 选择一个选项并不会带来任何性能提升,这实际上是一个优先选择的问题。