4

시스템에서 앱을 종료 할 때 로컬 (즉, LocalBroadcastManager로 관리) BroadcastReceiver가 누출 될 수 있습니까?로컬로 관리되는 브로드 캐스트 리시버가 누출 되었습니까?

내가 필요로하는 구체적인 사용 사례는 내가 활동의 onCreate/onDestroy에있는 BroadcastReceiver를 등록/등록 취소하고 싶습니다 (활동이 보이지 않을 때 수신자가 필요합니다).하지만 ' 이렇게하면 메모리 누수가 발생할 위험이 있습니다. 이해하는 바와 같이, 하나의 활동이 시스템에 의해 파괴되면 onDestroy가 실행되고 수신자는 등록이 취소됩니다. 앱이 죽으면 어떻게 될까요? 리시버가 주변에 머물러 있습니까, 아니면 로컬이 되어도 앱과 함께 죽게됩니까?

답변

4

, 당신은이 (가) IntentFilterList 대응에 정말 다양한 BroadcastReceiver를 연결하는 Map 그냥 일반 클래스 (당신이 말한대로 "지역 ')에 볼 수 있습니다.

"시스템 수준"에 아무 것도 등록되지 않았습니다. 아니요 : 앱이 종료되면 LocalBroadcastManager 클래스가 종료되고 누출이 발생하지 않습니다..

0

onDestroy는 앱의 활동이 완료되었음을 의미하지 않기 때문에 절대적으로 등록을 취소해야합니다. 앱의 다른 활동이 여전히 실행 중이므로 수신자가 누출을 유발할 수 있습니다. 당신이 LocalBroadcastManager source code 내부 들여다 경우

+0

답변 해 주셔서 감사합니다. 그러나 내가이 질문에 의미하는 바는 다른 경우였다. 메서드가 호출되지 않기 때문에 시스템이 응용 프로그램을 종료 할 때 OnDestroy에서 등록 해제가 발생하지 않을 수 있습니다. 이 경우 수신기가 누출 될 것인가? – pstobiecki

관련 문제