아래의 참고싸이트를 번역한 수준밖에 안됩니다 ^^;;;
보통 Handler를 사용할때 생길 수 있는 문제가...
1. 멤버변수로 new Handler() 의 인스턴스를 가지고 있는경우
핸들러의 인스턴스를 클래스가 가지고있으면, Message Queue가 Outer class인 Outer class의 reference를 잡고있게 되어버린다.
2. 핸들러가 Outer class의 reference를 가지고 있어야 할 경우
해결책
1. Handler 인스턴스가 필요한경우 새롭게 Handler class를 상속받는 static inner class를 내부에 정의하고 구현.
-> 이렇게 되면 Handler 인스턴스를 사용해도 Message Queue는 Outer class Reference를 안잡게되어, Activity가 종료되는순간 해제되게됨.
2. WeakReference 사용
Handler인스턴스도 결국 메시지를 받아서 Outer class인 Acitivtiy의 view를 변경해야할 작업이 있을 수 있음
이럴때 WeakReference로 받게되어 처리하게되면, Activity종료시점에 안정적으로 해제할 수 있음. 또한, Acitivtiy가 날라간 경우도 생길 수 있는데 이때 null check를 통해 안정적으로 가저가면 문제는 해결됨.
참고
https://android.jlelse.eu/9-ways-to-avoid-memory-leaks-in-android-b6d81648e35e
'안드로이드 > Memory Leak' 카테고리의 다른 글
9. memory leak 회피방법: TimerTask Reference 에서 주의 (0) | 2019.08.25 |
---|---|
8. memory leak 회피방법: Threads Reference 에서 주의 (0) | 2019.08.25 |
6. memory leak 회피방법: AsyncTask Reference 에서 주의 (0) | 2019.08.15 |
5. memory leak 회피방법: Broadcast 에서 주의 (0) | 2019.08.15 |
4. memory leak 회피방법: 익명클래스를 주의하라 (0) | 2019.08.12 |