我用Codename One编写的应用程序涉及在主窗体中显示相机预览。我已经使用本机接口实现使其在Android上运行(iOS以后)。
该应用还包括在应用内购买升级到完整版。这就是为什么定期显示表单以建议用户升级的原因。他们也可以选择稍后升级,这会导致此升级到完整版本表格消失,并使主要表单显示相机预览。
然而,在真实设备上,有时升级到完整版本形式并没有完全消失,并且在主窗体上有回忆。在这种情况下,相机预览会显示在屏幕的一部分上,而应用程序按钮则不会显示。但是,如果用户触摸屏幕几秒钟后,主表单将完全显示,升级表单的回忆消失。
看起来在UI线程上可能有太多事情要做,但我只是在用户按下按钮关闭升级表单时调用new MainForm(theme).show()
。所以这应该是好的,不应该吗?请注意,CN1模拟器不显示edt违规(但模拟器中没有相机预览)。
或者在将布局添加到布局后,我是否必须在MainForm中调用revalidate()?我应该怎么做才能使这些回忆消失?
任何帮助真的很感激,
答案 0 :(得分:0)
这些东西总是难以跟踪,但我猜测对等组件会以某种方式与新表单发生冲突。
请确保不要致电postInvalidate
,除非你真的必须这样做,即使这样你也应该尽可能地限制和避免它,因为它可能与我们的绘图逻辑冲突。
另外,请确保您没有更改父表单的不透明度,例如如果您更改了表单UIID。
答案 1 :(得分:0)
看起来已找到解决方案。事实上,我有一个原生方法初始化相机和surfaceview。我在EDT上运行这个方法然后显示新的MainForm。
我确实在invokeAndBlock()
块中接受了初始化方法。现在看起来这种滞后远远不那么明显(我看不到它)。在我自己的逻辑中,我可以用invokeAndBlock()
将在一个单独的线程上完成初始化工作并且当它完全就绪(因此可以显示相机和surfaceview)这一事实来解释它,可以显示MainForm
这可能是实际的解决方案@Shai吗?