내 질문은 내가 직면하고있는 메모리 누수에 관한 것이지만 (안드로이드 개발), 근본 원인을 찾을 수 없다.메모리 누수 - 다른 클래스의 비트 맵 유형 인스턴스 변수 초기화
나는 두 개의 클래스 -A와 B가 있습니다. 클래스 A는 B-objectB의 오브젝트를 가지고 있습니다. 클래스 B에는 비트 맵 유형의 인스턴스 변수 mTempBitmap이 있습니다. 클래스 A에서 비트 맵 객체 aBitmapObject를 만듭니다 & 초기화 - objectB.mTempBitmap = aBitmapObject. 클래스 B에서 API onDraw()에서 mTempBitmap을 null로 설정했습니다.
이제 키를 누를 때마다 objectB의 mTempBitmap이 업데이트되고 objectB.onDraw가 호출됩니다. 그러나 너무 빠르게 키를 누르면 onDraw()가 호출되지 않습니다.
이 경우 메모리 누수가 발생할 수 있습니다. 힙 덤프를 가져 와서 메모리 분석기 MAT 도구로 분석하면 예상하지 못한 50-60 비트 맵 객체를 찾습니다.
Java의 메모리 누수에 대한 정의가 명확하지 않지만 몇 가지 게시물을 읽었습니다.
위의 상황에서 발생하는 메모리 누수는 onDraw()가 호출되지 않아 objectB.mTempBitmap이 null로 업데이트되지 않기 때문일 수 있습니까 ?? (afaik, objectB.mTempBitmap이 null이 아니더라도 나중에 mTempBitmap이 다른 비트 맵을 가리 키므로 메모리 누수 문제가 없어야합니다.) 어딘가에 비트 맵 복사본이 생성되어 누출되는 이유가 무엇입니까 ?? objectB.mTempBitmap = aBitmap을 초기화 할 때 비트 맵 복사본이 생성 되었습니까? 아니면 다른 비트 맵이 동일한 비트 맵에 첨부됩니까 ?? (afaik, 동일한 비트 맵에 대한 또 다른 참조, 새로운 비트 맵 복사본이 생성되지 않음)
누구나 도움이된다면 도움이됩니다.