이 페이지에는 뷰 기반 레이아웃에 고유한 메모리 누수를 찾고 트리거하는 방법에 관한 정보가 포함되어 있습니다. 힙 덤프 캡처 및 분석에 관한 핵심 정보는 힙 덤프 캡처를 참고하세요.
메모리 누수 찾기
메모리 누수와 연결될 수 있는 클래스를 빠르게 필터링하려면 클래스 드롭다운을 열고 활동/프래그먼트 누수 표시 를 선택합니다. Android 스튜디오
는 앱의
Activity 및
Fragment 인스턴스에서 메모리 누수를 나타낸다고 생각하는 클래스를 표시합니다. 필터에 표시되는 데이터 유형은 다음과 같습니다.
- 삭제되었지만 아직 참조되고 있는
Activity인스턴스 Fragment인스턴스에 유효한FragmentManager가 없지만 아직 참조되고 있습니다.
다음과 같은 상황에서는 필터에 거짓양성이 표시될 수 있습니다.
Fragment를 생성하였지만 아직 사용하지 않은 경우Fragment가 캐시되고 있지만FragmentTransaction의 일부가 아닌 경우
메모리 누수를 더 수동으로 찾으려면 클래스 및 인스턴스 목록을 둘러보고 보관된 크기 가 큰 객체를 찾습니다. 다음과 같은 이유로 인해 발생한 메모리 누수가 있는지 확인하세요.
Activity,Context,View,Drawable및 기타Activity또는Context컨테이너에 대한 참조를 보유할 수도 있는 개체에 대한 장기적인 참조.- `Runnable`과 같이 `Activity` 인스턴스를 보유할 수 있는 비정적 내부 클래스.
RunnableActivity - 필요 이상으로 오랫동안 객체를 보유하는 캐시
잠재적인 메모리 누수를 발견하면 인스턴스 세부정보 의 필드 및 참조 탭을 사용하여 관심 있는 인스턴스 또는 소스 코드 줄로 이동합니다.
테스트를 위한 메모리 누수 트리거
앱에서 테스트할 메모리 누수를 유발하려면 다음 중 한 가지 방법으로 누수를 트리거하면 됩니다.
- 기기가 다양한 활동 상태에 있는 동안 기기를 세로 모드에서 가로 모드로 회전했다가 다시 되돌리기를 여러 번 반복합니다. 기기를 회전하면 앱
에서
Activity,Context또는View객체를 누출하는 경우가 많을 수 있습니다. 시스템에서Activity를 다시 만들고, 앱에서 이러한 객체 중 하나의 참조를 다른 곳에 유지하는 경우 시스템에서 가비지 컬렉션할 수 없기 때문입니다. - 다양한 활동 상태에 있는 동안 개발자의 앱과 다른 앱 간을 전환합니다. 예를 들어 홈 화면으로 이동한 다음 앱으로 돌아옵니다.