민프

[Flutter Error] Out Of Memory 대응방법 본문

[Flutter Error]

[Flutter Error] Out Of Memory 대응방법

민프야 2023. 12. 5. 16:08
W/om.example.aiex(23676): Throwing OutOfMemoryError "Failed to allocate a 115405 byte allocation with 166144 free bytes and 162KB until OOM, target footprint 268435456, growth limit 268435456" (VmSize 13972636 kB)
E/LoadTask(23676): OutOfMemory error loading stream
E/LoadTask(23676):   java.lang.OutOfMemoryError: Failed to allocate a 24 byte allocation with 424472 free bytes and 414KB until OOM, target footprint 268435456, growth limit 268435456; giving up on allocation because <1% of heap free after GC.
W/om.example.aiex(23676): Throwing OutOfMemoryError "Failed to allocate a 115212 byte allocation with 528168 free bytes and 515KB until OOM, target footprint 268435456, growth limit 268435456" (VmSize 13972636 kB)

 

이번 HPE 관련 앱을 만들면서 
동영상, 자세인식(ML), 카메라뷰를 사용하다보니 

자연스럽게 Out Of Memory가 나왔네요.

 

프로파일링 도구를 사용하며 메모리가 어떻게 사용되었는지 알아보았고, 그에 따른 나의 대응은 아래와 같습니다.

1. 메모리 누수 확인

  • 각 페이지별 컨트롤러, 자세인식 등등.. 메모리가 사용되고나서 dispose가 제대로 되어있는지 확인.

2. 이미지 및 동영상 메모리 사용 최적화

  • 해상도를 줄이고,
  • CachedNetworkImage: 네트워크 이미지를 캐싱,
  • 이미지 사전로딩: precacheImage 함수를 사용하여 이미지를 미리 로드,
  • ResizeImage: 이미지의 크기를 조정,
  • Lazy Loading: ListView.builder 또는 유사한 위젯을 사용하여 화면에 보이는 이미지만 로딩 시켰다.

3. 기본 메모리 크기 조절 

  • Android는 AndroidManifest.xml에서 android:largeHeap="true"를 추가하였고,
    IOS는 알아서 조절해준다고 하여서 실제로 테스트 해봤는데 자원관리가 안드로이드보다는 잘 되고 있는 것을 확인할 수 있었습니다.

 

Comments