2011-09-08 6 views
0

나는 TabbedViewNavigatorApplication 인 나의 첫 번째 플렉스 모바일 애플리케이션을 개발했다. 응용 프로그램은 정상적으로 작동하지만 "프로파일 처리기"에서 응용 프로그램을 테스트 할 때 응용 프로그램을 탐색 할 때 메모리 사용이 증가합니다. 그 사실을 알게되었을 때 추가 된 모든 이벤트 리스너를 제거해야하고 더 이상 필요없는 오브젝트를 무효화해야합니다. 탭 사이를 전환하면 탭이 몇 번이고 다시 초기화됩니다.플렉스 모바일 프로젝트 : 메모리 관리

어디서 eventlisteners를 제거 할 수 있는지 알지 못합니다. 내 말은, 나는 각 eventlisteners에 대한 함수를 작성했다. 컨트롤이 함수 정의로 넘어갈 때 eventListener를 제거해야합니까?

나는 또한 샘플 코드를

var more:Image = new Image(); 
    more.width = 70; 
    more.height=29; 
    more.x=10; 
    more.y=276; 
    more.source = "Assets/more button.png"; 
    more.addEventListener(MouseEvent.CLICK, MORE_clickHandler); 
    mainGroup.addElement(more); 



private function MORE_clickHandler(e:MouseEvent):void { 

// Do I need to remove the eventlistener here 

} 

서면 내가 명시 적으로 내가 만든 또는 가비지 컬렉터가 그것을 처리 할 이미지 클래스의 객체를 무효화해야하나요했다. 명시 적으로 무효화해야 할 경우,이를 수행 할 위치.

감사합니다.

답변

1

가비지 콜렉션은 특히 모바일, 모든 언어의 중요한 부분입니다. 모바일 장치는 데스크톱 대응 제품보다 훨씬 제한적이므로 메모리에 생성/저장되는 내용을 매우 조심해야합니다. 내 좌우명은, 당신이 그것을 보지 못한다면, 그것을 지켜서는 안된다는 것입니다. 뷰는 파기 할 수 있지만 뷰 모델을 사용하여 상태를 유지할 수 있습니다.

보기를 제거하려면 먼저 표시 목록 (removeElement(yourObject))에서 제거하고 모든 이벤트 리스너를 제거한 다음 참조하는 모든 변수를 무효화해야합니다. 변수에 여전히 참조가 있으면 가비지 수집되지 않습니다.

가비지 수집은 물론 풀링 및 가상화 (목록의 항목 렌더러)와 같은 몇 가지 멋진 트릭을 읽어 보는 것이 좋습니다.

+0

안녕 J_A_X, 제거 할 방법 및 위치 이벤트 리스너 및 참조하는 변수를 무효화 할 위치입니다. 제발 저에게 예제를 보여 주시겠습니까 –

+0

당신이 성취하려고하는 행동에 의존하기 때문에 예제를 보여 드릴 수 없습니다. 'removeEventListener'를 호출하고,'removeElement'를 사용하여 디스플레이리스트에서 제거하고'yourVar = null;'을하는 것만 큼 간단합니다. –

+0

감사합니다. J_A_X, 내가 할게요 –

0

약한 참조로 이벤트 수신기를 설정할 수 있습니다.

이것은 개체에 대한 유일한 참조가 수신기 인 경우 개체 자체가 가비지 수집 될 수 있고 수신기가이를 메모리에 보관하지 않음을 의미합니다.

다음은 트릭을 할 것입니다 :

more.addEventListener(MouseEvent.CLICK, MORE_clickHandler,false, 0, true); 

또 다른 옵션은 이미지 클래스를 서브 클래스 화해, 그것이 dispose() 메소드를 구현하도록 강요 것 인 IDisposable 인터페이스를 구현할 수 있도록하는 것입니다.

일부 유용한 자원 :
http://www.intriguemedia.net/2007/09/24/when-to-use-weak-references
http://gskinner.com/blog/archives/2006/07/as3_weakly_refe.html

환호

+0

1) 부적절한 코딩을 장려하고 2) 마크 및 스윕 가비지 수집이 참조 카운팅보다 느리다 (즉, 자신의 이벤트 리스너를 정리할 때) –