Die Adobe AIR Umgebung erlaubt es Applikationen in HTML und Flash für den Desktop zu schreiben. Unter Mac OS gibt es nun ein Problem das Flash Applikationen viel CPU verbrauchen wenn sie in den Hintergrund geschickt wurden und nichts mehr machen.
Eine Lösung für dieses Problem ist es die Framerate herunterzusetzen sobald die Applikation deaktiviert wird. Dies kann man mit folgendem Code sehr einfach bewerkstelligen. Dazu registriert man zwei Listener, die aufgerufen werden sobald die Applikation aktiviert bzw. deaktiviert wird. Im Aktivierungslistener setzt man die Framerate auf den gewünschten Werte und beim Deaktivieren setzt man die Framerate auf 0.1.
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init()" ....
private function init():void {
addEventListener(AIREvent.APPLICATION_ACTIVATE, onApplicationActivate);
addEventListener(AIREvent.APPLICATION_DEACTIVATE, onApplicationDeactivate);
}
private function onApplicationActivate(e:AIREvent):void {
stage.frameRate = 20;
}
private function onApplicationDeactivate(e:AIREvent):void {
stage.frameRate = 0.1;
}
Eine noch komfortablere Lösung habe ich auf dem Blog von Grant Skinner gefunden. Er hat eine Klasse FramerateThrottler geschrieben die man folgendermassen aufruft:
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
creationComplete="init()" ....
private function init():void {
FramerateThrottler.initialize();
}
Wenn man keine Parameter übergibt wird die Backgroundframerate auf 1 und die aktive Framerate auf 20 gesetzt. Man kann den Throttler auch so konfigurieren das die Anpassung der Framerate nur auf einem Mac OS durchgeführt wird.
private function init():void {
FramerateThrottler.initialize();
FramerateThrottler.onlyThrottleOnMac = true;
}
Adobe arbeitet an einer Lösung für dieses Problem so dass diese Workarounds nicht mehr nötig sind. Den Bug dazu findet man indem man das Adobes Bug System aufruft und eine Quick Search nach “FP-2009″ startet.
Weiterführende Links:
http://arno.org/arnotify/2009/05/writing-well-behaved-efficient-air-applications/
http://www.gskinner.com/blog/archives/2009/05/idle_cpu_usage.html