xamarin - 当 Forms.Init 被调用并且函数已经在另一个线程中运行时,Xamarin 中会发生什么?
问题描述
我正在考虑如何在我的应用程序启动期间降低加载 Forms.Init 的成本。我的应用程序可以完成一些工作,而无需访问 Xamari.Forms。我正在考虑在另一个线程中并行加载 Forms.Init。如果该线程尚未完成并且我已经需要 Xamari.Forms,我不确定在处理该事件时我的选择是什么。
当 Forms.Init 被调用并且函数已经在另一个线程中运行时,Xamarin 中会发生什么?或者是否有其他处理加载 Forms.Init 与其他工作并行的最佳实践?
解决方案
Forms.Init()
调用运行平台相关代码的私有SetupInit()
代码,从获取 Android 上下文、注册渲染器、添加日志侦听器等......
Assembly callingAssembly = Assembly.GetCallingAssembly ();
SetupInit (activity, callingAssembly);
除了同步完成之外,没有任何回调或事件尝试与Init
其他竞争,但有一个可以检查的布尔标志:
global::Xamarin.Forms.Forms.IsInitialized
但是,根据平台,可以在方法的开头或结尾设置此标志,并且还要注意没有lock
设置此标志(这会导致性能下降)。
因此,如果您需要运行的其他代码可以在没有 Forms 的情况下完全完成,是的,您可以并行运行它。
当然,您的Application
子类及其LoadApplication
步骤在完成之前不应Init()
完成。
推荐阅读
- ios - 表视图不更新当前状态
- influxdb - 有没有办法用 Flux 填充 0 值点的稀疏数据结果?
- python - 如何在 c++/python 中或使用任何其他 linux 命令对第一列的退化值取第二列的平均值?
- c# - mysql c#搜索文本框
- c - 如何使用 DMA 通道从 UART 外设读取?
- python - celery 接收任务但不返回结果,只是保持挂起
- java - 我的反应原生项目/应用程序中缺少 JDK。找不到 Tools.jar 或 JDK
- components - Hybris 中的全局消息
- r - verbatimTextOutput()不显示文本
- lyx - Lyx编译时的中文文件名