Hello. I have a new blog.

I've moved this blog to the following URL Kerkness.ca. Thank you for visiting, please update your bookmarks.

Thursday, February 14, 2008

Auto Reloading a Flex Application

I have a flex application which runs on a touch screen and I want to have the application reset itself when no one is using it.

To get this done I created a Timer that would reload my Flex app every 5 minutes and an event listener which would reset the timer everytime someone touched the screen (or clicked the app).

Example below.

AppTimer.as ActionScript Class File


package
{
import flash.events.Event;
import flash.events.TimerEvent;
import flash.utils.Timer;
import flash.net.URLRequest;
import flash.net.navigateToURL;

public class AppTimer
{
// Create Time Object to fire every minute for 5 minutes
public var myTimer:Timer = new Timer(60000,5);

public function AppTimer()
{
// designates listeners for the completion event
myTimer.addEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete);

// starts the timer ticking
myTimer.start();
}

// Function restarts the timer.
public function resetTimer():void
{
myTimer.reset();
myTimer.start();
}

// Function gets called when timer runs out. Reloads the page
public function onTimerComplete(evt:Event):void
{
var ref:URLRequest = new URLRequest("javascript:location.reload(true)");
navigateToURL(ref, "_self");
}

}
}
Main.MXML File
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
xmlns="*" creationComplete="initApp()">
<mx:Script>
<![CDATA[

// Creates the AppTimer Object
public var myTimer:AppTimer = new AppTimer();

// Function to run when app is created
private function initApp():void
{
// Add Event listner to track mouse clicks
application.addEventListener(MouseEvent.CLICK, globalClickEvent);
}

// Everytime a user clicks in the applicatoin run this function.
private function globalClickEvent(event:MouseEvent):void
{
myTimer.resetTimer(); // Call timer reset function
}

]]>
</mx:Script>
<mx:Panel width="100%" height="100%" title="My App with Timer"/>
</mx:Application>

If anyone knows a better way to accomplish the same task I would be interested to hear about it.

1 comment:

  1. I'm wondering if theres a better way to restart the app witout using navigateToURL.

    Unforturnately if the app is embeded in an html page, that approach doesnt work too well.

    ReplyDelete

Thank you for the comments.