当调用Forms.Init并且函数已经在另一个线程中运行时,在Xamarin中会发生什么?

时间:2018-11-12 11:17:20

标签: xamarin xamarin.forms

我正在考虑如何减少在应用启动期间加载Forms.Init的成本。 我的应用程序可以执行某些工作,而无需访问Xamari.Forms。我正在考虑在另一个线程中并行加载Forms.Init。 如果该线程尚未完成并且我已经需要Xamari.Forms,则不确定在处理该事件时我该选择什么。

当调用Forms.Init并且该功能已经在另一个线程中运行时,在Xamarin中会发生什么?还是在处理加载Forms.Init方面有其他最佳实践?

1 个答案:

答案 0 :(得分:2)

Forms.Init()调用私有的SetupInit(),该私有的运行依赖于平台的代码,包括获取Android上下文,注册渲染器,添加日志侦听器等...

Assembly callingAssembly = Assembly.GetCallingAssembly ();
SetupInit (activity, callingAssembly);

除同步完成外,没有其他尝试与Init竞争的回调或事件,但是有一个布尔标志可以检查:

global::Xamarin.Forms.Forms.IsInitialized

但是,根据平台的不同,可以在方法的开头或结尾设置此标志,并且请注意,设置此标志没有lock(这会导致表现出色)。

因此,如果您需要运行的其他代码可以完全不用Forms完成,可以,您可以并行运行。

您的Application子类及其LoadApplication步骤当然要等到Init()完成后才能完成。

re:https://github.com/xamarin/Xamarin.Forms