RuntimeException: Canvas: 에러

박재원·2023년 12월 20일
1

TIL

목록 보기
17/50
post-thumbnail

자기소개 앱 개발 중 랜덤으로 이미지가 출력되게 하는 기능을 만들고 있었다.
테스트를 하기 위해 디버그를 하는 도중 앱이 실행될 때 계속 다운되는 현상이 발생했다. 에러를 해결하기 위해 Logcat을 확인해 보니 이러한 에러가 떴다.

구글에 RuntimeException: Canvas: trying to draw too large 검색을 해본 결과 Exception은 메모리 캐싱 등의 부가 기능을 제공해주는 이미지 라이브러리 없이 직접 메모리 용량이 큰  이미지를 View에 로딩 했을 때, 나타나는 문제이다.

쉽게말해서 발생 원인은 이미지가 너무 커서
앱이 구동된 환경의 캔버스에서 못 그리겠다는 것이다.

해결방법

1. 이미지 사이즈를 줄여서 교체한다.

  • 특별한 상황이 아니라면 앱 용량도 줄어들고 효율적이기 때문에 이미지 크기를 줄이는 방법을 추천한다.

2. 고해상도 전용 drawable-xxhdpi 혹은 drawable-xxxhdpi 폴더로 이미지를 옮긴다.

  • 기본 drawable 폴더는 mdpi 해상도의 이미지를 보관한다.
  • 해상도별로 별도의 폴더에 이미지를 보관하는게 권고되는 듯 하다.

3. Android manifest 파일에서 하드웨어 가속 속성을 false로 준다.

  • 하드웨어에서는 가속화를 지원하므로, View의 캔버스에서 실행되는 모든 그리기 작업에서 GPU를 사용한다.
  • 하드웨어 가속을 사용하려면 필요한 리소스가 늘어나므로 앱에서 더 많은 RAM을 사용한다.

Android manifest 파일의 application에 해당 2가지 속성을 추가해준다.

android:largeHeap="true"
android:hardwareAccelerated="false"

0개의 댓글