我有一个Adobe AIR应用程序,其中的图表组件显示了一些在线数据。 图表组件必须显示大约10个参数。 该应用程序有一个计时器来显示当前系统时间。
从计时器(使用可绑定对象)调用图表组件,如下所示。单独的可绑定对象用于防止计时器延迟。
private function onTimerEvent(event:TimerEvent):void
{
//Update time in screen
oCurrDate = new Date();
curTime = oDateformatter.format(oCurrDate).toString();
oCurrDate = null;
//oUpdate- Bindable object to inform chart about update
//Call chart every 250 ms
oUpdate.bUpdate = !oUpdate.bUpdate;
}
我在图表的更新事件中使用了一个calllater函数,如下所示。 updateParameter()将更新每个参数的dataprovider并绘制它。
public function onUpdateEvent(evt:PropertyChangeEvent):void
{
//aPlotIndex set to 0 for first parameter
aPlotIndex.push(0);
this.callLater(updateParameter, aPlotIndex);
}
问题是计时器和图表更新在运行20到21天后停止。在20或21天后,更新仅在鼠标移动时发生。当我移动鼠标显示的时间&图表中的数据已更新。
我分析了应用程序,发现没有内存泄漏问题。我正在记录所有错误,但我也没有在日志中收到任何错误。一切似乎都很奇怪。
我使用的是Flex SDK3.3和Flex AIR版本2.0.4.13090。
请指导我解决此问题。
答案 0 :(得分:0)
请阅读Timer
的文档。
计时器设置为运行的总次数。如果重复计数设置为0,则计时器将无限期地继续,最多可达24.86天,或者直到调用stop()方法或程序停止。如果重复计数非零,则计时器将运行指定的次数。如果repeatCount设置为与currentCount相同或更小的总数,则计时器停止并且不会再次触发。
最大值是int
的最大值,这是计时器用来存储其当前计数的最大值。 int
的最大值为2,147,483,647
。 2147483647 / 24.86 days / 1440 minutes / 60 seconds /1000 milliseconds
等于1(给予或接受与文档数字舍入的方式不同),这与内部时钟存储Timer
已运行的每毫秒计数的事实一致
因此您无法设置选项来解决此问题。相反,您可以解决它,假设实际上没有任何东西依赖于您的计时器的价值。每次计时器运行时,请致电
timer.reset();
timer.start();
这会将计时器重置为0并再次启动它,这意味着你永远不会达到24.86天的限制,除非你的delay
长于那个(它不可能是)
此外,我想指出您运行的Flex和AIR版本已严重过时。两者都已近5岁了。 AIR可能因为它而无法在较新版本的Windows和OS X上正常运行(并且根本不会在移动设备上运行)。如果一切正常,那就没什么大不了了,但总是很有用(很多海报都没有意识到他们的Flex和AIR SDK是如何过时的)