뷰 계층 구조는 TabActivity
->ActivityGroups
->Activities
입니다.InputMethodManager는 탭 호스트 - 메모리 누수 - OOM 오류에 대한 참조를 보유합니다.
나는 따라서 TabWidget
가 유출되고, TabWidget
이 InputMethodManager
에서 참조 TabHost
에 의해 참조되는 것을 발견 MAT 사용. On 응용 프로그램 OutOfMemory 오류의 후속 시작 오류가 발생합니다.
은 마찬가지로 내 모든 활동은 InputMethodManager
에 의해 참조됩니다. 이 (키를 반격) 제대로 응용 프로그램을 마무리에
(내 모든 액티비티 그룹이, 활동, tabactivity, tabhost 및 tabwidget가! 유출하는 응용 프로그램을 닫은 후), 다음은 로그 캣에 표시됩니다
이 WARN/InputManagerService (99) : 비 집중 [email protected] 클라이언트에서 입력을 시작 (UID = 10052 PID = 1463)
InputMethodManager
에서 기준을 제거하는 방법
.. .? 내가 시도
것 :
A.이 방법 내 TabActivity
1 myTabWidget.removeAllViews()
2 myTabWidger.invalidate()
행운의 onDestroy
를 호출!
- 이미 게시 질문 : 나는 시도 Main Activity is not garbage collected after destruction because it is referenced by InputMethodManager indirectly
(참고로, 내가 한 지점에서 두 TabActivities을 볼 수 있었지만 문제가 InputMethodManager 아니었다, 그것은 코드의 정적 참조했다). "패턴 관찰자"에 대해 더 자세히 설명하는 링크를 제공해 주시겠습니까? – Mani
http://en.wikipedia.org/wiki/Observer_pattern 하나의 모델을 Observable (제목)으로, Activities를 Observers (인터페이스 "Observer"를 구현)로 만들었습니다. 처음에는 활동이 모델에 등록되었습니다 (우리는 싱글 톤을 사용하지만 서비스 또는 응용 프로그램을 사용할 수 있습니다). 흥미롭고 관찰 가능한 해고 이벤트가 있었으면 모든 고객에게 알립니다. 파괴되기 전에, Activity는 Observable에서 자체 등록을 취소하여 메모리 누수를 피했습니다. 안드로이드에서 메모리 누수의 원인은 대부분 간단합니다 : Context/View/Dialog는 어딘가에서 정적으로 선언되었습니다. – QuickNick