2

보유 및 취소 할 수없는 DialogFragment이있는 경우 getActivity()는 어떤 상황에서 null을 반환 할 수 있습니까? 유지할 수없는 DialogFragment의 getActvity()가 null 일 수있는 시점은 언제입니까?

지금까지 내가 이해, 활동이 파괴 될 수있는 유일한 방법은

: 뒤로 버튼을 통해

  1. - 내 대화 이후 일어날 수없는 회전 통해
  2. uncancelable입니다 -이을 (내 대화 상자가 유지되고 내 주 스레드 콜백이 실행되기 전에 활동이 다시 첨부 (한 주 스레드 메시지의 활동 재현으로 인해) 될 것이므로 문제가되지 않습니다.

내가 가진 질문은 내가 누락 된 것인가? 아니면 내 가정이 틀렸는가?

답변

0

질문에 대한 답변이 정확하지 않지만 DialogFragment에서 Handler를 사용할 때 null을 반환하는 getActivity()가 있습니다. Handler가 DialogFragment 인스턴스에 대한 링크를 가지고 있더라도 handleMessage() 메소드에서 여전히 getActivity()가 null로 남아 있습니다. 왜 그런 일이 일어 났는지 들으면 기뻐할 것입니다.

P. 훨씬 더 이상한,이 DialogFragment가 처음 만들어지는 것은 모든 것이 좋습니다. 이 DialogFragment의 새로운 인스턴스를 만들면 Handler의 getActivity()가 null을 반환하기 시작합니다.

나는 우리가 새로운 DialogFragment를 만드는 동안, 핸들러가 내 어떻게 든 여전히 (이미 분리 된 활동이 없음) 예전에 부착

내 처리기 정적 아니라는 것을 인정해야합니다 것을 의심 권장대로.

P.P.S 단편 용으로 compat lib를 사용합니다.

+0

핸들러를 사용하는 것은 Looper가 연결된 라이프 사이클을 제외하고는 어떤 라이프 사이클에도 연결되지 않기 때문에 항상 문제가있다. 그래서, Handler를 사용하여 객체를 누설하는 것이 매우 쉽습니다. –

0

Ok. 약간의 생각을 준 후에 나는 내 잘못을 이해했다고 생각합니다. 첫 번째 DialogFragment의 핸들러가 내 서비스에 등록되었으며 결코 등록이 취소되지 않았습니다. 그래서 메시지가 왔을 때이 핸들러에도 들어갑니다. 나는 그것이 아직 메모리 누수를 일으킬 수 있다고 생각한다 : D