我正在考虑如何减少在应用启动期间加载Forms.Init的成本。 我的应用程序可以执行某些工作,而无需访问Xamari.Forms。我正在考虑在另一个线程中并行加载Forms.Init。 如果该线程尚未完成并且我已经需要Xamari.Forms,则不确定在处理该事件时我该选择什么。
当调用Forms.Init并且该功能已经在另一个线程中运行时,在Xamarin中会发生什么?还是在处理加载Forms.Init方面有其他最佳实践?
答案 0 :(得分:2)
Forms.Init()
调用私有的SetupInit()
,该私有的运行依赖于平台的代码,包括获取Android上下文,注册渲染器,添加日志侦听器等...
Assembly callingAssembly = Assembly.GetCallingAssembly ();
SetupInit (activity, callingAssembly);
除同步完成外,没有其他尝试与Init
竞争的回调或事件,但是有一个布尔标志可以检查:
global::Xamarin.Forms.Forms.IsInitialized
但是,根据平台的不同,可以在方法的开头或结尾设置此标志,并且请注意,设置此标志没有lock
(这会导致表现出色)。
因此,如果您需要运行的其他代码可以完全不用Forms完成,可以,您可以并行运行。
您的Application
子类及其LoadApplication
步骤当然要等到Init()
完成后才能完成。