【问题标题】:Xamarin.Forms - Embedded resource causing - The application may be doing too much work on its main thread [closed]Xamarin.Forms - 嵌入式资源导致 - 应用程序可能在其主线程上做太多工作 [关闭]
【发布时间】:2022-01-25 07:13:58
【问题描述】:

按照this 实现了 FontImageSource 以在我的应用程序上显示图标,图标显示,但嵌入文件 - FontAwesome.otf 导致 "Skipped 3120 frames! The application may be doing too much work on its main thread" 问题并且应用程序无法导航到其他页面。删除文件后应用程序再次正常工作。我正在使用 Font Awesome Solid .otf 文件,大约 500KB,常规(免费)没有我需要的所有图标(它是 95KB),它可以与 常规图标 配合使用强>。有没有办法解决它?我需要使用这些图标。

更新:

步骤:

  1. 在 Resources 文件夹中添加了 Font Awesome Solid .otf 文件。从here下载它。
  2. 在命名空间之前将[assembly: ExportFont("FontAwesome.otf", Alias = "FontAwesome")] 添加到 App.xaml.cs。
  3. 创建FontAwesomeIcons.cs,从here获得
  4. 添加了xmlns:fontAwesome="clr-namespace:MobileApp.UI" 代码.xaml 页面。
  5. 创建的图标:
<Image>
          <Image.Source>
                  <FontImageSource FontFamily="FontAwesome" Color="#666666" Size="Large" Glyph="{x:Static fontAwesome:FontAwesomeIcons.CloudUpload}"/>
          </Image.Source>
    </Image> 

主页加载 - 图标在那里,我单击一个按钮导航到另一个页面,执行 API 调用需要很长时间,我得到一个结果,然后应用程序没有转到下一页并且代码没有转到到下一行。删除 .otf 文件可以解决问题,但我需要使用图标。有什么建议吗?

【问题讨论】:

  • 1) 请将您的代码添加到问题中。即使它与链接代码完全相同,这也证实了没有一些不同的细微细节。并将帮助将来在谷歌上搜索该主题的其他人(链接可能会随着时间的推移而损坏)。 2) 使用该字体呈现的文本看起来还可以吗? (这确认它加载正常,只是花费了太长时间,并且让应用程序处于错误状态。)
  • @ToolmakerSteve 更新了我的问题。

标签: xamarin.forms font-awesome


【解决方案1】:

问题链接的博客文章包含一个 github 存储库的链接。我已经 cloned 20201113-xamarin-font-awesome,将其更新为 Xamarin Forms 5.0.0.2291 和 Android API 31。

运行没有问题。请注意,在模拟器上运行时,通常会在开始时跳帧。

重要的是 UI 是否仍然存在。我用一个弹出警报的按钮验证了这一点。

内容页面上的 xaml:

<ContentPage ...
    xmlns:fontAwesome="clr-namespace:FontAwesome"
    ...>

    <StackLayout Margin="20">
        <Image>
            <Image.Source>
                <FontImageSource FontFamily="FontAwesome5Regular"
                                 Color="Black"
                                 Glyph="{x:Static fontAwesome:FontAwesomeIcons.ThumbsUp}"/>
            </Image.Source>
        </Image>
        <Button Text="Press Me" Clicked="Button_Clicked" />
    </StackLayout>
...

.xaml.cs:

public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();
    }

    private void Button_Clicked(object sender, EventArgs e)
    {
        Device.BeginInvokeOnMainThread(async () =>
        {
            await DisplayAlert("Testing", "Yes, the UI is still alive.", "OK");
        });
    }
}

FontAwesomeIcons.cs:

using System;

namespace FontAwesome
{
    /// <summary>
    /// The unicode values for all FontAwesome icons.
    /// <para/>
    /// See https://fontawesome.com/cheatsheet
    /// <para/>
    /// This code was automatically generated by FA2CS (https://github.com/matthewrdev/fa2cs).
    /// </summary>
    public static partial class FontAwesomeIcons
    {
        //...
    
        /// <summary>
        /// fa-thumbs-up unicode value ("\uf164").
        /// <para/>
        /// This icon supports the following styles: Light (Pro), Regular, Solid, Duotone (Pro)
        /// <para/>
        /// See https://fontawesome.com/icons/thumbs-up
        /// </summary>
        public const string ThumbsUp = "\uf164";
        
        //...
    }
}

FontAwesome5Regular.otf 在主项目中,文件夹 Resources / Fonts。
构建操作 = 嵌入式资源。

结果:

下载此存储库。看看它是否适合你。如果确实如此,请找出它与您所做的事情之间的差异。

【讨论】:

  • 我在主页加载时看到图标,应用程序工作文件包含 95KB 的 FontAwesomeRegulat.otf 文件,我使用的是 500KB 的 FontAwesomeSolid.otf,当我尝试导航到另一个页面时,在获得结果后从 API 调用,我检查是否 IsSuccessStatusCode ,之后它不会转到下一行。
猜你喜欢
  • 2013-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多