어제
Adobe AIR에서 CPU 사용을 줄이는 방법에 대해서 소개했다. 이 글에
Hika님과
찬익님이 그에 대해 댓글을 달아주시며 다른 정보를 공유해주셨다. 정말 감사드린다. 이런 것이 블로그의 매력일 것이다. 블로그를 내 완벽한 지식을 전달하기 위해 쓴다는 것은 다소 어폐가 있다. 완벽한 것은 없다. 블로그는 지식 소통의 도구로 잘 활용하면 좋은 정보 공유를 통한 더욱 완전해지는 지식습득이 가능하게 한다. 난 지난 몇년간 블로그를 하면서 정말 몸소 체험했다. 지금 이글을 보고 있는 분들도 꼭 블로그를 하길 권장한다.
각설하고.
찬익님이 Flex 4 기반에서 AIR 애플리케이션을 만들때 FrameRate를 조절하는 방법으로
backgroundFrameRate를 소개해주었다. 이것은 Event.ACTIVATE와 Event.DEACTIVATE를 이용해서 이미 Flex 4의
WindowedApplication 클래스에 적용되어 있다. 아래 코드는 WindowedApplication 클래스의 일부이다.
/**
* Constructor.
*
* @langversion 3.0
* @playerversion AIR 1.5
* @productversion Flex 4
*/
public function WindowedApplication()
{
super();
addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
addEventListener(FlexEvent.PREINITIALIZE, preinitializeHandler);
addEventListener(FlexEvent.UPDATE_COMPLETE, updateComplete_handler);
addEventListener(FlexEvent.CREATION_COMPLETE, creationCompleteHandler);
var nativeApplication:NativeApplication = NativeApplication.nativeApplication;
nativeApplication.addEventListener(Event.ACTIVATE, nativeApplication_activateHandler);
nativeApplication.addEventListener(Event.DEACTIVATE, nativeApplication_deactivateHandler);
nativeApplication.addEventListener(Event.NETWORK_CHANGE, dispatchEvent);
nativeApplication.addEventListener(InvokeEvent.INVOKE, nativeApplication_invokeHandler);
initialInvokes = new Array();
//Force DragManager to instantiate so that it can handle drags from
//outside the app.
DragManager.isDragging;
}
/**
* @private
* Storage for the backgroundFrameRate property.
*/
private var _backgroundFrameRate:Number = 1;
/**
* Specifies the frame rate to use when the application is inactive.
* When set to -1, no background frame rate throttling occurs.
*
* @default 1
*
* @langversion 3.0
* @playerversion AIR 1.5
* @productversion Flex 4
*/
public function get backgroundFrameRate():Number
{
return _backgroundFrameRate;
}
/**
* @private
*/
public function set backgroundFrameRate(frameRate:Number):void
{
_backgroundFrameRate = frameRate;
}
/**
* @private
*/
private function nativeApplication_activateHandler(event:Event):void
{
dispatchEvent(new AIREvent(AIREvent.APPLICATION_ACTIVATE));
// Restore throttled framerate if appropriate when application is activated.
if (prevActiveFrameRate >= 0 && stage)
{
stage.frameRate = prevActiveFrameRate;
prevActiveFrameRate = -1;
}
}
/**
* @private
*/
private function nativeApplication_deactivateHandler(event:Event):void
{
dispatchEvent(new AIREvent(AIREvent.APPLICATION_DEACTIVATE));
// Throttle framerate if appropriate when application is deactivated.
// Ensure we've received an updateComplete on the chance our layout
// manager is using phased instantiation (we don't wish to store a
// maxed out (1000fps) framerate).
if ((_backgroundFrameRate >= 0) && (ucCount > 0) && stage)
{
prevActiveFrameRate = stage.frameRate;
stage.frameRate = _backgroundFrameRate;
}
}
이는 Flex 4를 이용해 AIR 애플리케이션을 만들때 별도의 조치없이 backgroundFrameRate 속성 설정만으로 frameRate를 조절할 수 있다. 이 값은 기본으로 1이다. 더 좋은 값은 0.01이라고 한다. 이는 거의 멈추게 하는 수준이다. 이 속성은 Flex 4에서 AIR를 위해 WindowedApplication 에만 적용되어 있다. Flash기반인 Application 클래스에는 이 속성이 없다.
참고글
Adobe AIR에서 CPU 사용을 줄이는 방법
글쓴이 : 지돌스타(
http://blog.jidolstar.com/624)