我花了数百个我们用Flex 4.0开发Adobe AIR应用程序,现在我认为我应该已经完成了,但是在让应用程序运行超过几个小时后,UI响应开始缺乏...
我的工作:我的应用程序使用自定义的色度,通过将窗体模块中的BorderContainer设置为透明度.我打开了许多不同的弹出窗口,它们都基于Window-Class(不是TitleWindow!),并在ActionScript中动态创建和关闭.通过使用Flex Profiler,我当然知道,垃圾收集器会正确销毁所有已分配的资源,并且内存消耗不随应用程序正常运行时间而增加.此外,分析器向我显示,我的方法都没有占用大量的cpu时间,所以这也应该没问题.
真正有趣的是:如果我不断地与应用程序交互(单击按钮,写文本,......)没有任何反应,一切都很好,但如果我不与应用程序交互几分钟然后回来 - UI-响应能力真差!
真的很差意味着,如果我在TextInput-Control中输入一些文字,我可以看到每一封写的信都延迟至少1秒!
有没有人经历过类似的情况,或者有人知道,问题可能是什么?我的建议是,在一些活动之后,flash-player-runtime限制了AIR应用程序的cpu使用,并且在用户返回时不会返回全部功率.
我使用Flex 4.0,Flex 4.1,AIR 1.5,带有Flash Player 9的AIR 2.0以及在Windows XP和Windows 7上运行的Flash Player 10测试了该应用程序...
我终于找到了解决方案!
Flex 4引入的新spark组件为WindowedApplication类添加了一个名为"backgroundFramerate"的属性.默认情况下,此属性设置为1,这意味着当主(!)应用程序窗口处于非活动状态时,AIR会自动限制帧速率.不幸的是,这个帧率用于整个应用程序,包括所有其他窗口实例,它们可以在前台并且是活动的!
通过将backgroundFramerate-property设置为-1来禁用自动帧率限制后,所有问题都消失了!
我知道,我已经知道,将新窗口派生的对象用于显示弹出窗口,我相信这是Flex 4中的一个仍然没有修复的错误.