반응형
블로그 이미지
개발자로서 현장에서 일하면서 새로 접하는 기술들이나 알게된 정보 등을 정리하기 위한 블로그입니다. 운 좋게 미국에서 큰 회사들의 프로젝트에서 컬설턴트로 일하고 있어서 새로운 기술들을 접할 기회가 많이 있습니다. 미국의 IT 프로젝트에서 사용되는 툴들에 대해 많은 분들과 정보를 공유하고 싶습니다.
솔웅

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

카테고리


반응형
Posted on . Written by



여러분 앱이 너무 많은 메모리를 차지한다면 OS는 low memory warning을 보낼 겁니다. 이 메세지의 의미는 뭔가 하라는 거겠죠. (메모리를 좀 더 풀어 주라던가 하는....) 계속해서 많은 메모리를 차지하고 있으면 OS는 아마 여러분 앱을 강제로 종료 시킬 겁니다. 여러분 앱이 강제로 종료 되면 유저 입장에서 보면 뭔가가 잘 못되서 앱이 끝난 겁니다. 그 앱에 대해 부정적인 이미지를 줄 수 있겠죠.


오늘 다룰 주제에서는 이 low memory warning이 왔을 때 어떻게 대응할 것인가 입니다. 그리고 crash를 방지하기 위해 해야 할 몇가지를 추천해 드릴거구요.


NOTE: Low memory warnings들은 현재 안드로이드 플랫폼에서는 제공하지 않습니다. 그러니까 오늘의 튜토리얼은 대부분 iOS에 포커스를 둔 겁니다. 하지만 예방 방법은 모든 플랫폼에 마찬가지로 적용할 수 있을 겁니다.






Responding to the Warnings


memory warnings에 응답하기 위해서는 memoryWarning 이벤트 리스너를 Runtime object에 추가 해야 합니다. 이 튜토리얼에서는 여러분이 main.lua에서 작업하는 것을 상정하고 얘기를 진행하겠습니다.


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())
  • 제일 핵심사항은 필요하지 않은 것들은 다 제거한다 입니다.


아래 예제가 있습니다.


local function onMemoryWarning( event )
    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 하는 것을 막는게 목표입니다.

반응형