오늘 다룰 주제에서는 이 low memory warning이 왔을 때 어떻게 대응할 것인가 입니다. 그리고 crash를 방지하기 위해 해야 할 몇가지를 추천해 드릴거구요.
NOTE: Low memory warnings들은 현재 안드로이드 플랫폼에서는 제공하지 않습니다. 그러니까 오늘의 튜토리얼은 대부분 iOS에 포커스를 둔 겁니다. 하지만 예방 방법은 모든 플랫폼에 마찬가지로 적용할 수 있을 겁니다.
Responding to the Warnings
Runtime:addEventListener( "memoryWarning", onMemoryWarning )
만약 memoryWarning 이벤트 리스닝을 중지하고 싶으면 아래처럼 이벤트 리스너를 제거하면 됩니다.
Runtime:removeEventListener( "memoryWarning", onMemoryWarning )
만약 main.lua 가 아닌 다른 모듈에서 이 momoryWarning을 적용한다면 그 이벤트 리스너가 앱이 처음 시작할 때 로딩되지 않을 겁니다.
The Listener
이제 onMemoryWarning 함수에 실제로 무엇을 넣을지는 여러분이 정하실 사항입니다. 왜냐하면 각 앱마다 로직이 다 다르고 그 자세한 사항은 여러분 만이 알 것이기 때문이죠.
그 작업을 할 때 아래 사항들을 염두에 두시고 하세요.
- 필요하지 않은 객체들은 가능한 모두 Unload 한다.
- 필요하지 않은 이벤트 리스너들 특히 enterFrame 리스너 같은 것들은 stop 시킨다.
- 현재 active 되 있지 않은 scene들은 Parge 하고 remove 시킨다. (try: storyboard.removeAll())
- 제일 핵심사항은 필요하지 않은 것들은 다 제거한다 입니다.
아래 예제가 있습니다.
audio.dispose( someAudioHandle )
storyboard.removeAll()
end
Runtime:addEventListener( "memoryWarning", onMemoryWarning )
Preventing Memory Warnings
여러분이 할 수 있는 최선의 방법은 우선 memory warning이 일어나지 않도록 예방하는 겁니다. 정확히 무엇을 해야 된다라고 딱 찝어 내서 얘기할 수는 없습니다. 왜냐하면 여러분이 앱을 개발하는 사람이기 때문입니다. 그래도 몇가지 아이디어는 드릴 수 있습니다.
- heavy scene으로 전환하기에 앞서 다른 모든 scene들을 purge 시키세요. (혹은 여러분의 scene을 생성할 때 그 이전의 모든 scene들을 purge 시키세요)
See: storyboard.purgeAll() - 다양한 플랫폼과 디바이스에서 작업을 하신다면 프로그램 내에서 그 디바이스가 lower-performance device인지를 체크하세요. 그렇다면 그런 디바이스에는 다른 그래픽 set을 로드하시거나 좀 더 작은 객체들을 로드하도록 하세요.
- 뭐가 필요하고 뭐가 필요 없는지 판단해서 불필요한 것들은 버리세요.
- 코드를 한줄 한줄 다시 살펴 보세요. 혹시 어디엔가 메모리 누수현상이 없는지......
여러분들 앱에 맞게 여러분이 할 수 있는 다른 많은 것들이 있을 겁니다. 명심할 것은 memory warning 이 일어나기 전에 가능한 많은 리소스들을 free up 시키자는 겁니다. memoryWarning 이벤트에서는 더 말할 나위가 없겠죠. 그렇게 함으로서 OS 가 여러분 App 을 Kill 하는 것을 막는게 목표입니다.
'Corona SDK > Corona Doc' 카테고리의 다른 글
Blend Modes 사용해서 Creative Effects 내기 (1) | 2012.11.01 |
---|---|
원근감을 주는 parallax scrolling 구현하기 (0) | 2012.10.18 |
Sprite 로 애니메이션 표현하기와 그 methods 들 (0) | 2012.10.11 |
코로나에서 외부 모듈은 어떻게 작동 될까? (0) | 2012.08.29 |
스토리 보드 기본 사용법 (1) | 2012.08.23 |
화면 전환 하면서 state(상태) 관리하기 (0) | 2012.08.09 |
Storyboard: Scene Purging vs. Removal (0) | 2012.08.02 |
Tap 이벤트로 간단하게 touch 감지하기 (0) | 2012.07.26 |
System Events 사용해서 앱의 현 상태 저장하기 (0) | 2012.07.20 |
Best Practices for Organizing Projects (2) | 2012.07.11 |