엑티비티 Leak
엑티비티의 참조가 남아있어서 Destroy 후에도 GC되지 않는 증상으로, 안드로이드에서 메모리 누수의 주 원인으로 꼽힌다. 엑티비티 인스턴스는 다른 인스턴스에 비해서 메모리를 많이 차지하고, 일반적으로 뷰 등 여러가지 멤버필드를 가지고있기 때문에 엑티비티 Leak이 발생하면 자칫 치명적인 성능저하를 유발할 수도 있다.
LeakCanary
Square 사(BetterKnife 만든 회사)에서 만든 무료 라이브러리로, 그나마 쉽게 엑티비티 Leak을 감지할 수 있도록 도와준다.
적용방법
- app의 build.gradle에 다음의 dependancy를 추가한다.
dependencies {
//Debug용 컴파일
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5'
//Release용 컴파일 - Release시에는 아무 동작도 안하도록
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5'
}
2.Application의
onCreate()
메서드에서 초기화한다.public class ExampleApplication extends Application {
@Override public void onCreate() {
super.onCreate();
if (LeakCanary.isInAnalyzerProcess(this)) {
// This process is dedicated to LeakCanary for heap analysis.
// You should not init your app in this process.
return;
}
LeakCanary.install(this);
// 앱 초기화 로직
}
}
이용방법
앱을 테스트하다보면 다음 이미지와 같이, 추가한적 없는 아이콘이 보이는 경우가 있는데, 저 아이콘이 보이고 Notification이 존재한다면 현재 앱은 엑티비티 Leak이 존재하는 것이다.
장/단점
- 장점
- 적용이 매우 쉽다.
- Leak이 발생하면 시각적으로 알 수 있어서 직관적이다.
- 단점
- Activity Leak를 확인하는 것만 가능하다. - 다른 메모리 Leak은 불가능
- Activity의 Destroy 시점에서 검사를 진행하므로 화면 전환속도가 조금 느리다. - release 버전에서는 LeakCanary가 동작하지 않도록 빈 라이브러리를 컴파일하거나, 라이브러리를 제거해야 한다.
참고자료
- 공식 Github : https://github.com/square/leakcanary
스크린샷이 짤렸어요 ㅠㅠ
답글삭제알려주셔서 감사합니다! 짤린 스크린샷 업데이트했어요~
삭제BetterKnife -> ButterKnife 오타 있습니다 ㅠㅠ
답글삭제답글이 늦어서 죄송합니다.
삭제알려주셔서 감사해요~^^