【问题标题】:MultiView first show, very low FPS animationMultiView 首秀,非常低的 FPS 动画
【发布时间】:2017-08-08 20:45:49
【问题描述】:

我有一个 MultiView,其中包含多个项目和 TImages 作为图标而不是 ImageList(我之前使用过 ImageList,但它非常损坏,消耗的 CPU 也不少)。

发生的事情是:当用户在应用打开后第一次点击 MasterButton 或滑动 MultiView 时,应用会冻结大约 1/3 秒,然后滑动动画以大约 2 或 3 fps 的速度显示,在第一张幻灯片之后,MultiView 恢复正常的 fps 动画。

我尝试从 OnStartShowing 中删除所有代码,但它完全没有区别。什么可能导致此问题?有一些方法可以“预加载”第一次演出期间可能加载的内容?

【问题讨论】:

  • 一点也不奇怪,我已经看到很多关于这个问题的投诉。不是您的确切场景,不一定只是多视图,但通常,许多 FMX 控件,第一次访问和/或动画时,它非常缓慢。我总是不鼓励这样做,但如果性能是一个问题,并且如果您仅打算针对 Android,那么您应该使用更原生的 Android 开发工具。例如:stackoverflow.com/questions/43232968/…
  • 也许我们可以对 FMX 库进行编辑以改进它?使其成为线程或双缓冲...
  • @MaurícioLima 虽然 Delphi 确实带有完整的 VCL 代码,但恐怕提供的 FMX 代码是有限的。所以我怀疑你是否能够自己优化它,特别是因为没有提供用于渲染 FMX 核心的代码。
  • @SilverWarior 我明白了,也许如果我将 ListBox 切换到其他东西可以提高一些性能?

标签: android delphi firemonkey delphi-10.1-berlin multiview


【解决方案1】:

一种选择是删除您在多视图中使用的所有标准控件,并改用 Alcinoe 标准控件。它们是双缓冲的,因此您可以预加载它们,并且它们的绘制速度比普通的 Delphi 样式控件快得多(我说得多)。一般来说,尽量避免使用所有样式控件(例如:Tlabel)并改用经典控件(例如:TText)

另外说明:试试看是否选择了系统上可用的字体,否则当应用程序第一次渲染控件时,使用系统上不存在的字体会花费很长时间是时候确定要使用的字体了

注意:我无法发表评论,所以我无法回答@jerrydodge,但我想说他是假的,使用delphi,您可以使用studio/xcode 构建快速的应用程序(至少在柏林之下,在东京他们实际上是一个错误)!您只需要正确构建它;)尝试使用双缓冲控件查看 alcinoe 项目

【讨论】:

  • 实际上我对 FMX.FontGlyphs.Android.pas 进行了更改,所以我可以使用部署中的字体,这可能导致 0.3 秒冻结?我已经使用过一次 Alcinoe TEdit,我将尝试实现其他控件。谢谢。
  • 我将项目中的大量控件替换为 Alcinoe 控件,但其中一些(如图像和视频)似乎有点难以正确构建,并且没有教程解释。
猜你喜欢
  • 1970-01-01
  • 2021-03-07
  • 2020-11-08
  • 1970-01-01
  • 2013-11-02
  • 1970-01-01
  • 2013-01-02
  • 2014-10-09
  • 1970-01-01
相关资源
最近更新 更多