2017-01-10 4 views
4

나는 100s의 단편을 가진 커다란 프로젝트를 가지고있다. 그들은 모두 제가 설명하려고하는 패턴을 거의 따르고 제 질문이 따를 것입니다.onDestroy 동안 뷰에서 View.OnClickListener를 해제해야합니까?

public class MyFragment extends Fragment implements View.OnClickListener { 

    public void onDestroy(...) { 
    } 

    public void onCreateView(...) { 
     ... 
     root.findViewById(R.id.some_button).setOnClickListener(this); 
     return root; 
    } 

    public void onClick(View v) { ... } 
} 

onDestroy의 조각에서 청취자를 해제해야합니까? 이것은 메모리 누출인가 아니면 전혀 문제를 야기 할 것입니까? 이것들을 청소하는 것이 우수 실행으로 간주됩니까? 그리고 가능한 이유에 대한 설명?

+1

현재 관측 된 공연 수행이 있습니까? 청취자가 왜 추가 메모리로 누출됩니까? –

+0

아니요. 나는 미래의 문제 나 배경에 문제가있는 앱에 대해 주로 걱정하고 있습니다. 나는이 청취자를 석방하는 것이 좋은 생각이거나 좋은 습관이라고 말하고있는 파트너가 있으며 이유를 알지 못합니다. –

+1

클릭 청취자를 삭제하는 것에 대한 언급을 본 적이 없습니다. 액티비티를 가리키는 "프래그먼트 상호 작용 리스너"는 제거되어야합니다. 단, 액티비티는 onDestroy에서 분리 되었기 때문에 제거해야합니다. –

답변

5

아니요, 아니요, onDestroy 이벤트에서 onClickListener를 해제 할 필요가 없습니다. 프래그먼트가 리스너이기는하지만 가비지 컬렉터는 순환 참조조차도 해결할만큼 똑똑합니다. 가비지 컬렉션에 대해 둘 다 알 수있는 한 문제는 없습니다.

+0

이 문제를 지원할만한 참고 자료 나 증거가 있습니까? 또한 가비지 수집 대상을 어떻게 알 수 있습니까? –

+0

순환 참조에 관한 내용은 [this] (http://stackoverflow.com/questions/1910194/how-does-java-garbage-collection-work-with-circular-references)에서 볼 수 있으며, 안드로이드에서 메모리 프로파일 러를 사용하는 개인적인 경험. – NameSpace

+0

@JBlaz 나는'Thinking in Java'라는 책을 추천 할 것이다. 쓰레기 수거 과정은 아주 잘 설명되어 있습니다. – YTerle

관련 문제