티스토리 뷰

728x90
반응형

This Handler class should be static or leaks might occur


안드로이드에서 Handler 오브젝트는


모든 스레드 반복문에서 참조하는데


어느 한 곳에 종속되면 안되기 때문이다.


그렇게 되면 GC가 되지 않아 Memory Leak이 계속해서 발생하게 되는 것이다



이전 소스


1
2
3
4
5
6
Handler handler = new Handler(){
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
    }
};
cs



Handler를 상속받은 클래스를 하나 만들어 static 등록



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private final MyHandler handler = new MyHandler(this);
 
private static class MyHandler extends Handler {
    private final WeakReference<MainActivity> weakReference;
 
    public MyHandler(MainActivity activity) {
        this.weakReference = new WeakReference<MainActivity>(activity);
    }
 
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
    }
}
 
cs


반응형
공지사항
최근에 올라온 글