dispose()导致Android上的屏幕闪烁

dispose()导致Android上的屏幕闪烁,android,codenameone,Android,Codenameone,我有一个问题,Android上的dialog.dispose()之后屏幕会闪烁(iOS上不会发生这种情况) 这是视频(请用480p观看,因为YouTube以较低的分辨率播放画面) 下面是对话框的代码 Dialog dialog = new Dialog("Shop"); TableLayout dialogLayout = new TableLayout(buttons.length, 4); dialog.setName("ShopDialog"); dialog.setLayout(di

我有一个问题,Android上的
dialog.dispose()
之后屏幕会闪烁(iOS上不会发生这种情况)

这是视频(请用480p观看,因为YouTube以较低的分辨率播放画面)

下面是对话框的代码

Dialog dialog = new Dialog("Shop");
TableLayout dialogLayout = new TableLayout(buttons.length, 4);

dialog.setName("ShopDialog");
dialog.setLayout(dialogLayout);
dialog.setDisposeWhenPointerOutOfBounds(true);
然后TableLayout会被标签和按钮填充,包括“关闭”按钮

问题是,如果我点击“关闭”按钮,整个屏幕就会闪烁, 它看起来像是覆盖形状的黑色矩形的非常简短的外观, 但如果你点击退出对话框,它不会发生,它会正常消失

我已经尝试将窗体色调更改为白色
setTintColor(0x3fffffff)
,以检查它是否与色调相关,但看起来好像没有,尽管窗体色调设置为25%白色,但仍然有黑色闪烁

这发生在三种不同的形式上,有不同的对话框,所以这应该是更一般的,不像以前那样,但我在全局级别上唯一改变的是iOS的构建提示,它不应该对Android产生影响


有什么想法吗?

这可能是后台表单的性能问题或EDT违规。在安卓系统中,我们异步绘制屏幕,如果我们错过了一帧,就会发生这种情况。您可以通过使用主题常量删除对话框转换来缓解此问题:

dialogTransitionIn=empty
dialogTransitionOut=empty

但这可能是因为表单的某个元素需要太长时间才能绘制。在模拟器中打开表单,并将其填充到显示问题的级别(无需打开对话框)。然后在性能监视器工具中刷新树并检查绘制表单所需的绘制操作。看看是否有些东西很贵。

Hi@Shai,
dialogTransitionIn=empty
dialogTransitionOut=empty
已经存在了,由于旧Android手机的性能问题,我不得不关闭表单和对话框的转换。关于表单性能问题,roudned按钮确实存在一些问题,但我已将按钮面替换为图像,这些圆形按钮实际上是png图像(大小为1-10KB),是表单背景中唯一的大图像,100KB,1080x2048,
样式。背景图像缩放
删除背景和按钮图像没有帮助,在
ActionListener
中调用
dialog.dispose()
后,表单仍会闪烁。出于某种原因,如果我点击对话框外部,则不会发生这种情况,尽管调用了相同的
dialog.dispose()
,但在本例中,在dialog类的
pointerReleased
方法中,您在绘制时在控制台中看到了什么吗?在这种情况下,设备可能有问题,它会在日志中打印一些内容。您可以做的另一个测试是将按钮的actionListener的内容用callSerially包装,以将其推迟到EDT的下一轮。这可能解决了这个问题。谢谢@Shai,应用程序日志中没有错误,但是使用CallSerialy worked包装actionListener的内容,不再闪烁屏幕,我如何才能接受这一点?您可以编辑原始答案以包含callSerially吗?按钮释放会发出重新绘制,该重新绘制可能会以某种方式与按钮dispose重新绘制冲突。
dialog.showPacked(BorderLayout.CENTER, true);
dialogTransitionIn=empty
dialogTransitionOut=empty