[Android] 메모리릭 과 Leak Canary

Twaun·2022년 6월 11일
0

Android-Library

목록 보기
2/10

메모리릭 이란?

메모리릭이란 필요없는 객체 또는 사라진 객체를 참고하고 있을 때 OOM(Out Of Memory)로 인해 충돌이 발생하는 것을 말한다.

안드로이드에서 발생하는, 내가 겪어본 메모리릭으로는 다음과 같다.

  1. application context를 UI와 관련된 곳에서 사용했을 때
  2. activity context를 잘못 참조하거나, 해당 activity가 사라졌음에도 어딘가에서 context를 변수화하여 참조하고 있을 때
  3. 이벤트 콜백, 비동기 작업이 제대로 종료되지 않았을 때
  4. fragment binding의 null 처리가 되지 않았을 때

Leak Canary 이란?

안드로이드 메모리릭을 감지하고 알려주는 라이브러리이다.

사용

1. 준비

dependencies {
  // debugImplementation because LeakCanary should only run in debug builds.
  debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.9.1'
}

2. 다운로드

기기에 빌드를 하면 다음과 같이 다운로드된 것을 확인할 수 있다.

3. 확인

클릭해서 들어가면 다음과같이 메모리릭 여부를 알 수 있다. 앱 진행 시 메모리릭이 발생하면 친절히 알림도 보내주고 해당 화면에서 상세한 내용을 확인이 가능하다.

4. 메모리릭 해결 경험

  1. UI와 관련된, 특정 activity에 연결 되어있을 때 사용하는 context는 application context가 아닌 해당 activity context를 사용할 것!!
  2. 싱글톤 클래스와 같은 앱 전역에 걸쳐서 사용하는 경우에는 application context를 사용할 것!!
  3. 이벤트 콜백, 비동기 작업 같은 경우에는 해당 라이프사이클이 해제(onDestroy)될 때까지 작업이 끝나지 않았다면 작업을 종료시키고 라이프사이클이 해제 되어야한다.
  4. fragment binding 같은 경우에는 onViewDestroy()에서 꼭 binding null 처리를 해줘야한다!!
    이에 fragment는 생성과 해제에 있어서 베이스 코드가 많기 때문에 BaseFragement 부모 클래스를 만들어 사용하는 것이 좋다!!
profile
Android Developer

0개의 댓글