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

zqdjd7g9  于 2022-12-25  发布在  其他
关注(0)|答案(2)|浏览(113)

下面是我的代码:

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()方法中有什么区别吗?正常的做法是什么?

xxls0lw8

xxls0lw81#

我已经使用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
    }

构造函数是用来连接的。在构造函数中,你希望避免做实际的工作。你基本上准备了要使用的类。方法是用来做实际的工作的。

**注意:**选择其中一种并不会带来任何性能提升-这实际上是偏好和标准的问题。

siotufzp

siotufzp2#

Please go through the details here
你可以在App()构造函数中编写初始化代码,但是在注册事件时要非常小心。
原因是,
例如,在Android中,如果应用程序已启动且位于任务列表中,并且您尝试通过单击应用程序图标再次启动应用程序,则App()的构造函数将再次调用。这将多次注册事件,并将产生问题。
因此对于事件,我建议您使用overriden方法来注册事件。
正如Jason所指出的,在哪里编写代码是您个人的偏好。

相关问题