최악의 상황을 가정해보자
1. static변수가 Inner class의 인스턴스를 저장하고있다.
2. inner class가 outer class의 context 정보를 가지고 있다.
해결방법
1. static변수에 context를 담지말고 일반변수로 담아라
2. inner class 를 -> static inner class로 변경해라. => static inner class는 hidden으로 outer class instance의 reference를 가지지 않는다.
3. WeakReference를 이용해서 context를 받고 필요할때 get으로 꺼내서 지역변수 수준으로 사용해라.
static inner class 생성자 {
private final WeakReference<Activity> activityRef = new WeakReference<>(activtiy);
}
...
public void someMethod() {
Activtiy activity = activityRef.get();
if (activtiy != null) {
....
}
}
참고
https://android.jlelse.eu/9-ways-to-avoid-memory-leaks-in-android-b6d81648e35e
'안드로이드 > Memory Leak' 카테고리의 다른 글
5. memory leak 회피방법: Broadcast 에서 주의 (0) | 2019.08.15 |
---|---|
4. memory leak 회피방법: 익명클래스를 주의하라 (0) | 2019.08.12 |
non static inner class를 memory 해제를 할 순 없을까? (1) | 2019.08.11 |
Static inner class를 쓰는이유는 무엇일까? (0) | 2019.08.11 |
2. memory leak 회피방법: Singleton class에게 context reference를 넘기지마라 (0) | 2019.08.11 |