어제 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)

+ Recent posts