Adobe AIR问题

时间:2014-07-25 05:39:25

标签: flex air flex3

我有一个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天后,更新仅在鼠标移动时发生。当我移动鼠标显示的时间&图表中的数据已更新。

我分析了应用程序,发现没有内存泄漏问题。我正在记录所有错误,但我也没有在日志中收到任何错误。一切似乎都很奇怪。

  1. 是因为使用了calllater功能。
  2. 计时器是否仍在运行但帧更新未发生。
  3. 我使用的是Flex SDK3.3和Flex AIR版本2.0.4.13090。

    请指导我解决此问题。

1 个答案:

答案 0 :(得分:0)

请阅读Timer的文档。

  

计时器设置为运行的总次数。如果重复计数设置为0,则计时器将无限期地继续,最多可达24.86天,或者直到调用stop()方法或程序停止。如果重复计数非零,则计时器将运行指定的次数。如果repeatCount设置为与currentCount相同或更小的总数,则计时器停止并且不会再次触发。

最大值是int的最大值,这是计时器用来存储其当前计数的最大值。 int的最大值为2,147,483,6472147483647 / 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是如何过时的)