xamarin - 对于 Xamarin Forms 应用程序,我应该如何决定 App 构造函数或 OnStart() 中的内容?
问题描述
这是我的代码:
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() 方法中是否有任何区别?这样做的正常方法是什么?
解决方案
我已经使用Xamarin.Forms
了很长时间,这就是我和我的开发人员使用 OnStart 方法的方式!
如果您查看Microsoft文档,它会说明以下内容:
OnStart - 在应用程序启动时调用。
所以,首先,你应该知道该OnStart
方法没有具体的用途,老实说,使用构造函数和生命周期方法之间没有太大区别,因为两者都是在 XF 框架启动时调用的,首先是构造函数,然后是OnStart
方法。
现在让我们来看看差异,
现在,正如Jason指出的那样,该OnStart
方法是生命周期方法,因此具有与构造函数不同的返回类型,因此您甚至可以在方法中调用异步代码,OnStart
但您不能在构造函数中执行相同操作,因为构造函数不能是异步的.
这意味着如果您有以下方法:
public async Task<bool> IsSomeThingWorkingAsync(//SomeParams)
{
// Code
}
现在,不能从构造函数异步调用此方法,因为构造函数是强制同步的并且没有返回类型。但是,如果您尝试从 on start 方法执行此操作,它会很容易并且会起作用,在这种情况下,您使用 OnStart 方法。如下所示:
protected override async void OnStart()
{
bool WasWorkSuccess=await IsSomeThingWorkingAsync();
//do something with the boolean
}
构造函数旨在用于布线。在构造函数中,您希望避免做实际工作。你基本上准备了要使用的类。方法旨在完成实际工作。
注意: 通过选择一个而不是另一个没有任何性能提升,这实际上是一个偏好和标准问题。
推荐阅读
- javascript - TOP Calculator: 如何创建一个函数来对字符串中的数字进行运算?
- python - 如何在 Python Idle 中制作和运行单元测试?
- kubernetes - 如何使用扩展/缩减策略实现 Kubernetes 水平 Pod 自动扩展?
- ios - 放大自定义挑战从未发送
- excel - 如何去除 CSV 文件中字符串末尾不需要的逗号
- ffmpeg - FFMPEG 将流帧保存到单个图像文件(不是序列)
- regex - sed 用两个句点/句号替换单词边界
- tableau-api - 将 Tableau 与使用“into”语句创建的表连接后,如何更新月度数据?
- javascript - Google 跟踪代码管理器中的自定义 HTML - 侦听 Enter 按键 - 除 Textarea 外的站点上任何地方都可以工作
- email - MS Outlook:将数据从组邮箱导出到 CSV 文件