首页 > 解决方案 > 当 Forms.Init 被调用并且函数已经在另一个线程中运行时,Xamarin 中会发生什么?

问题描述

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

当 Forms.Init 被调用并且函数已经在另一个线程中运行时,Xamarin 中会发生什么?或者是否有其他处理加载 Forms.Init 与其他工作并行的最佳实践?

标签: xamarinxamarin.forms

解决方案


Forms.Init()调用运行平台相关代码的私有SetupInit()代码,从获取 Android 上下文、注册渲染器、添加日志侦听器等......

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

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

global::Xamarin.Forms.Forms.IsInitialized

但是,根据平台,可以在方法的开头或结尾设置此标志,并且还要注意没有lock设置此标志(这会导致性能下降)。

因此,如果您需要运行的其他代码可以在没有 Forms 的情况下完全完成,是的,您可以并行运行它。

当然,您的Application子类及其LoadApplication步骤在完成之前不应Init()完成。

回复:https ://github.com/xamarin/Xamarin.Forms


推荐阅读