2011-02-11 7 views
3

뷰를 확장하고 내 액티비티의 인스턴스를 전달하여 뷰가 일부 멤버 변수 및 메서드에 액세스 할 수 있도록했습니다.보기에서 해당 활동을 표시하는 것이 안전합니까?

하지만 지금은 잠재적 인 메모리 누수가 될 수 있다고 생각 해요. 활동이 삭제 된 후에도 여전히 멤버 변수의 뷰에 대한 참조가 있고 그 반대의 경우도 있기 때문입니다. 따라서 가비지 컬렉터는 결코 그들을 정리할 수 없습니다.

그러나 일부 Google API 데모 및보기에서 활동을보기로 리스너로 전달한 사례를 보았습니다.

답변

6

이것은 괜찮습니다. 생성자를 사용하여 프로그래밍 방식으로 만드는 일반 View는 Context를 인수로 사용합니다. 대개 생성자에게 준 Context는 단지 this이거나 Activity 자체입니다. 따라서 View에는 이미 Activity에 대한 참조가 있습니다. getContext() 메서드를 사용하여 View 클래스에서이 클래스를 가져올 수도 있습니다.

활동이 파괴되면 GC가이를 제거 할 수있을 때까지 메모리에 남아 있습니다. 그러나 onDestroy 메서드의 일부로 포함 된 모든 뷰에 대한 참조를 null로 설정합니다. 그런 다음 GC는 모든 구성 요소보기를 안전하게 제거 할 수 있습니다. 완료되면 Activity에 남아있는 참조가 없으며 다른 GC 패스가이를 삭제할 수 있습니다.

+0

감사합니다. 나는 시야가 파괴되는 동안 일어난 일을 정확히 이해하지 못했습니다. – Tenfour04

3

모든 View 생성자는 Context를 매개 변수로 사용하여 이미 참조를 갖습니다. 어쩌면 사용자 정의보기의 코드를 게시하여 검토 할 수 있습니다.

관련 문제