jns*_*jns 2 gluon gluon-mobile
我有一个自定义ListCell实现,如下图所示。
左侧,代表日期,由 3 个标签组成,放入 aVBox和由计数器组成的“CounterContent” TextField,每个数字为 a HBox,包含在 a 中,两个Hboxes包含用于 kWh、kWh/day 等的标签. 这似乎太多了,无法高效运行。
我试图在后台任务中加载数据,显示进度指示器,而任务正在运行,但与桌面不同,在 android 上的性能非常差。每当我切换到列表视图时,垃圾收集就会启动并阻塞 ui 线程,因此进度指示器永远不会出现。
我已经在华为 Y-300、Android 4.1.1、javafxports 8.60.6(因为 javafxports 8.60.7 导致错误,导致TextField无法使用)和三星 S5 mini、Android 5+上尝试过。在三星手机上,性能总体上要好得多,就像预期的那样,因为我猜是提前编译,但仍然存在垃圾收集问题。此外,在列表视图中填充了单元格后,滚动不是很流畅。
列表单元是复杂的还是性能不佳的其他原因?
更新:
运行大量测试后,似乎滚动不流畅不是由性能问题引起的。至少在 S5 上(javafxports 8.60.7)。
我删除了所有 css 样式,并用单个标签替换了文本字段(计数器节点已经是一个自定义控件(忘记了),它在 2 Regions(不是HBoxes)中布置了文本字段,并且ListCell在构造函数中实例化了 的节点) . 此外,我切换了ListViewaCharmListView并设置了 android.monocle.input.touchRadius=1。
这些步骤都没有带来显着的改进。
澄清一下:与华为手机相比,S5和安卓5+的滚动是可以用的,但不是很流畅,导致用户体验不尽如人意。
在华为 (javafxports 8.60.6) 上,更改标签的计数器文本字段有显着改进,但还没有达到滚动可用的程度。直到我设置了这个神奇的实验开关:gluon.experimental.performance=true,这使得列表视图的滚动速度快如闪电(经过一点预热延迟),但仍然不是很流畅。
复杂场景的性能降低的原因有很多,所以这只是一个可能有助于改进它的想法列表,按任何顺序排列。
列表单元格
对于初学者来说,单元中的节点数量确实很高。请注意,您所做的每一次滚动都意味着包含可见单元格的虚拟流的完整渲染。对于每个单元格,这意味着重新创建其内容。
如果不查看您的代码,我无法判断,但是您应该避免始终为单元格中的每个节点创建新实例,updateItem方法是只有一个实例,并且在方法中仅更改节点的内容。
看看这个样本。该NoteCell班是一个自定义单元格,其中ListTile被使用。
节点数
您是否尝试过仅使用 aLabel来替换 8 个文本字段和 3 个框?
缓存
如果您使用从 Internet 下载的图像,请使用 Gluon Charm DownCache以避免重复下载相同的图像。
看看这个样本。如果没有缓存,即使在桌面上,性能也会受到影响。
还可以为任何节点使用 JavaFX 内置缓存,尝试不同的缓存策略。
CSS
复杂的 CSS 需要很长的 CPU 时间。尝试简化它。即使您可以删除整个 CSS 以进行快速测试。然后决定你可以或不可以使用什么。
动画也是如此:尽可能避免动画、过渡甚至 CSS 效果。
自定义控件
计数器复杂节点可能会替换为优化渲染的自定义控件。
魅力列表视图
您是否尝试过使用 Gluon CharmCharmListView控件而不是ListView?
有一个新的实验性标志,您可以使用它来测试可能会在滚动列表时提高性能的可能优化。设置gluon.experimental.performance=true的java.custom.properties文件,并给它一试。
JavaFXPorts 版本
您提到由于 TextField 错误,您正在使用 8.60.6。在这种情况下,您的TextField节点是否可编辑?如果没有,我建议用其他节点替换它们并使用 8.60.7 运行,因为它包含很多性能改进。
性能工具
使用Monitor等性能工具并使用其分析选项,以便您可以追踪任何可能的瓶颈。
中央处理器
最后但并非最不重要的一点:您的移动设备规格始终至关重要。
尝试在 Cortex A5 上渲染复杂场景,因为“它是最小、成本最低和功耗最低的 ARMv7 应用处理器”,或者使用非常旧的 Android 4.1.1,无法像在具有更高规格的全新设备。
正如您还提到的,在 Cortex A7 上运行的性能“更好”。看看这个比较,找到适合这项工作的架构。
不管怎样,总有改进的余地,付出了很多努力。随时欢迎您的反馈。
| 归档时间: |
|
| 查看次数: |
1068 次 |
| 最近记录: |