Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Adobe AIR applications slow response after idle time

I spent hundreds of ours developing an Adobe AIR Application with Flex 4.0 and now I thought I should have finished, but after letting the application run for more than a few hours the UI-responsiveness begins to lack...

What I do: My application uses custom chromes by setting backgroundImages with transparency to BorderContainers within Window-modules. I open up many different popups, which all are based on the Window-Class (not TitleWindow!) and created and closed dynamically in ActionScript. By using the Flex Profiler I certainly know, that the garbage collector destroys all the allocated ressources correctly, and the memory consumption does not rise with application uptime. Further the profiler shows me, that none of my methods occupate extensive cpu-time, so this also should be ok.

What is really interesting: If I continously interact with the application (click buttons, write text,...) nothing happens and everything is fine, BUT if I do not interact with the application for several minutes and then come back - the UI-responsiveness is really poor!

Really poor means, that if I type some text into a TextInput-Control, I can watch every single letter being written with a delay of at least 1 second!

Has anyone experienced a similar situation, or someone who knows, what the problem could be? My suggestion is, that after some activity the flash-player-runtime limits the cpu-usage of the AIR application, and doesn't give back full power when the user returns.

I tested the application with Flex 4.0, Flex 4.1, AIR 1.5, AIR 2.0 with Flash Player 9 and also Flash Player 10 running on Windows XP and Windows 7...

like image 426
Daniel Lang Avatar asked May 04 '10 19:05

Daniel Lang


1 Answers

I have finally found the solution!

The new spark-components introduced with Flex 4 added a property called "backgroundFramerate" to the WindowedApplication-class. By default, this property is set to 1, which means that AIR automatically throttles the framerate when the main (!) application-window get's inactive. Unfortunately this framerate is used for the whole application, including all other window-instances which could be in the foreground and active!

After disabling the automatic framerate-throttling by setting the backgroundFramerate-property to -1 all the problems were gone!

Altough, I know, that instiating new window-derived objects to show popup-windows, I believe that this is a bug in the Flex 4 which is still not fixed.

like image 102
Daniel Lang Avatar answered Sep 24 '22 13:09

Daniel Lang