You have exponential timer creation occurring! At 5 ticks your timer will
complete. Both onTick and onTimerComplete will occur (in that order), and 2
more timers will get created. In 5 seconds both onTick and onTimerComplete
will occur on both of those timers and 4 more timers will get created. in 5
seconds. 8 more. 16 more.. 32 more. etc.

 

To protect against this kind of bad coding, a good practice for timers is to
declare them on the class (not within the function as you have), and when
you want to start them, check to make sure they aren't running first, if
they are, stop them beforehand. and don't declare new timers if at all
possible - instead use the reset function.

 

HTH!

 

Seth

 

From: [email protected] [mailto:[EMAIL PROTECTED] On
Behalf Of doepositive
Sent: Thursday, December 20, 2007 12:03 PM
To: [email protected]
Subject: [flexcoders] IE keeps growing and growing and growing

 

I'm changing the selectedIndex of a data grid with a simple function 
call triggered by a Timer. I posted something a few weeks ago about 
the same topic when changing an image. I was under the impression 
that it was the image that was makeing the IE object size grow but it 
seems with this new test that there is another issue with automating 
a function with a Timer. Does anybody have any work arounnd for this 
problem? I can't belive that this type of thing is an issue with a 
platform like flex. 

Here is the working code...it's pretty straight forward. I just don't 
get it.

---------------------------CODE---------------------------------------
<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"; 
layout="vertical"
width="577" 
height="68" 
horizontalAlign="center" paddingBottom="0" paddingLeft="0" 
paddingRight="0" paddingTop="0" 
verticalAlign="middle" initialize="RSSfeed.send()" 
creationComplete="ShortTimer()"> 

<mx:Script>
<![CDATA[
import mx.controls.Alert;
private function nav(myUrl:String):void
{
var urlToNav:URLRequest = new URLRequest(myUrl);
navigateToURL(urlToNav,"_blank");
}
[Bindable]
private var num:int = 1;
////move the visible section of the data grid in focus
private function changeIndex():void 
{
entries.scrollToIndex(num);//entries refers to the data 
grid below
if (num < RSSfeed.lastResult.rss.channel.item.length){
num++;//increase if thess than the length of 
the feed
}else{
num = 1;//set back to 1
}
}
private function ShortTimer():void 
{
// creates a new five-second Timer
var minuteTimer:Timer = new Timer(1000, 5);
// designates listeners for the interval event and the 
completion event
minuteTimer.addEventListener(TimerEvent.TIMER, onTick);
minuteTimer.addEventListener(TimerEvent.TIMER_COMPLETE, 
onTimerComplete);

// starts the timer ticking
minuteTimer.start();
}
private function onTick(evt:TimerEvent):void 
{
if(evt.target.currentCount == 5){
ShortTimer();
}
}
public function onTimerComplete(evt:TimerEvent):void
{
changeIndex()
ShortTimer();
}


]]>
</mx:Script>
<mx:Style>
DataGrid {
backgroundAlpha: 1;
backgroundColor: #000000;
alternatingItemColors: #ffffff, #eff1f2;
horizontalGridLines: true;
letterSpacing: 0;
horizontalGridLineColor: #990000;
verticalGridLines: false;
useRollOver: false;
borderThickness: 2;
borderColor: #ffffff;
selectionColor: #000000;
color: #ff0000;
textSelectedColor: #ff0000;
textIndent: 0;
dropShadowEnabled: true;
shadowDistance: 3;
shadowDirection: right;
fontSize: 14;
fontWeight: normal;
headerStyleName: "mydataGridHeaderStyle";
}

.mydataGridHeaderStyle {
color: #999999;
letterSpacing: 0;
}
</mx:Style> 
<mx:HTTPService showBusyCursor="true" id="RSSfeed" 
url="http://www.weather.gov/alerts/ma.rss"; resultFormat="object" />
<mx:DataGrid sortableColumns="false" width="506" height="48" 
id="entries" dataProvider="{RSSfeed.lastResult.rss.channel.item}" 
horizontalCenter="0" verticalCenter="0"
click="nav(RSSfeed.lastResult.rss.channel.item
[entries.selectedIndex].link)" cornerRadius="6" borderStyle="solid" 
borderColor="#00ff00" alternatingItemColors="[#000000, #000000]" 
selectedIndex="1"> 
<mx:columns>
<mx:DataGridColumn dataField="title" 
headerText="Mass Weather Advisory Feed" fontSize="9" 
wordWrap="true"/> 
</mx:columns> 
</mx:DataGrid> 
</mx:Application>

 

Reply via email to