2016-04-24 16 views
2

我有一个自定义的ListCell实现,如下图所示。Gluon上的ListView性能不佳

enter image description here

左侧,这表示日期,由3个标签,放入VBox和“CounterContent”由...组成的计数器,具有TextField各数位中,包含在HBox,和两个Hboxes包含千瓦时标准,千瓦时/日等。这似乎太过分了,无法正常运行。

我试图在后台任务中加载数据,显示进度指示器,而任务正在运行,但与台式机不同,在android上性能非常差。无论何时切换到列表视图,垃圾收集都会启动,并阻止ui线程,以便进度指示器永不显示。

我试过了华为Y-300,Android 4.1.1,javafxports 8.60.6(因为javafxports 8.60.7导致bug,使得TextField无法使用),而在三星S5 mini,Android 5 +。在三星手机上,由于我猜想的是前期编译,所以性能总体来说会更好,就像预期的那样,但仍然存在垃圾收集问题。此外,在listview填充单元格后,滚动不是很平滑。

列表单元是否复杂,或者其他可能导致性能差的问题?

UPDATE:

跑了很多的测试中,它似乎不平滑滚动不是由性能问题导致的后。至少在S5(javafxports 8.60.7)上。

我删除了所有的CSS样式,并且由单个标签替换文本框(计数器节点已经是一个定制的控制(忘了这一点),它勾画出文本框在2 Regions(未HBoxes)和所述节点ListCell在构造函数中实例化)。此外,我将ListView转换为CharmListView并设置了android.monocle.input.touchRadius = 1。

这些步骤都没有导致相当大的改进。

只是为了澄清:与华为手机相比,S5和Android 5+上的滚动功能可用,但不是很流畅,这使用户体验不尽如人意。

在华为(javafxports 8.60.6)上,更改标签的计数器文本框显着改进,但不能滚动到可用的位置。直到我设置了这个神奇的实验开关:gluon.experimental.performance = true,这使得列表视图快速滚动(在稍微加热延迟之后),但仍然不是很流畅。

回答

4

为什么减少复杂场景的性能有很多原因,所以这只是一个可能的想法列表,可能有助于以任何顺序改进它。

的ListCell

对于初学者来说,节点的单元格中的数字是非常高。请注意,您制作的每一个卷轴都意味着保存可见单元格的虚拟流程的完整渲染。而对于每个细胞来说,这意味着重新创建其内容。

如果没有查看您的代码,我不能告诉,但您应该避免通过只有一个实例来创建单元中每个节点的新实例,并且在updateItem方法中只更改节点的内容。

看看这个sampleNoteCell类是一个自定义单元,其中使用了ListTile。只使用Label更换8个文本框和3盒节点

您是否尝试过的

号码?

缓存

如果您使用从互联网上下载的图片,使用胶子的魅力下Cache避免被下载了一遍又一遍相同的图像。

看看这个sample。没有缓存,即使在桌面上,性能也受到影响。

对任何节点使用JavaFX内置缓存,尝试不同的缓存策略。

CSS

复杂的CSS需要很长的CPU时间。尝试简化它。即使你可以删除整个CSS进行快速测试。然后决定你可能使用或不使用。

动画也是如此:如果可能,避免动画,转换甚至CSS效果。

自定义控件

计数器复杂的节点可能可能是通过优化渲染一个自定义的控制来代替。

CharmListView

您是否尝试过使用胶子的魅力CharmListView控制,而不是ListView

有一个新的实验性标志,您可以使用它来测试可能的优化,以便在滚动列表时提高性能。在java.custom.properties文件上设置gluon.experimental.performance=true,然后试一试。

JavaFXPorts版

你提到你正在使用8.60.6,因为文本字段的bug。在这种情况下,您的TextField节点是可编辑的吗?如果没有,我建议用其他节点替换它们,并使用8.60.7来运行它,因为它包含很多性能改进。

性能工具

使用性能工具,如Monitor并使用其profiling选项,以便您可以跟踪下来的任何可能的瓶颈。

CPU

最后但并非最不重要的:您的移动设备的规格总是至关重要的。

试图在Cortex A5上渲染复杂的场景,考虑到“它是最小,成本最低,功耗最低的ARMv7应用程序processor”,或者使用非常旧的Android 4.1.1,其性能不如在具有更高规格的全新设备上运行它。

正如你所提到的,运行在Cortex A7上可以实现“更好的方式”。看看comparison,找到适合这份工作的架构。

无论如何,总是有改进的空间,并且付出很多努力。您的反馈总是值得欢迎的。

+0

感谢您的详细信息!我已更新我的问题,并采取了所采取的措施,以进一步调查问题 – jns

+0

很高兴您获得了一些改进。您是否尝试过2015年Gluon的[JavaOne](https://play.google.com/store/apps/details?id=com.gluonhq.applications.javaone)应用程序?它使用一个性能相当好的'CharmListView'控件,但没有实验标志。检查设备中的滚动是否顺畅。 –

+0

刚刚尝试过,在滚动时看到相同的小“跳跃”,所以我的列表单元格实现不会引起这种效果,正如我在开始时所预期的那样。在Web视图中滚动例如超级平滑。 – jns