관리 메뉴

개발용

[Android] Handler 이용 시 메모리 누수 본문

개발/Android :

[Android] Handler 이용 시 메모리 누수

DeP 2015. 7. 29. 15:09

Handler는 non-static 클래스이므로 외부 클래스 Activity의 레퍼런스를 가지고 있다.

따라서 어플리케이션이 종료되어도 Garbage Collect되지 않을 수 있으므로, 메모리 누수가 발생할 위험이 있다.

 

 

***************************** Solution ******************************

 

 

Handler를 static inner class으로 전환시켜 선언해야 한다. 그러나 Handler 내부의 소스코드 중 Activity 멤버를 참조하므로 이를 위해서는 약참조를 위한 WeakReference를 이용한다.

 

**중략

onCreate 내에서 mHandler.sendEmptyMessage(0);

 

private static class WeakHandler extends Handler {

private final WeakReference<SampleActivity> mWeakActivity;

 

private WeakHandler([NAME_OF_ACTIVITY] activtiy){

mWeakActivity = new WeakReference<SampleActivity>(activity);

}

 

@Override

public void handleMessage(Message msg){

super.handleMessage(msg);

 

SampleActivity _activity = mWeakActivity.get();

if(_activity != null){

//activity Method Call

}

}

}

 

private void handleMessage(Message msg){

// 메인의 멤버들을 이용하는 코드들 (원하는 동작) 작성

}

 

private final WeakHandler mHandler = new WeakHandler(this); // onCreate에 넣어도 OK

 

 

 

 

 

 

#참고 :

http://blog.naver.com/zoomen1004/220053616676

http://blog.naver.com/twotoedsloth/220020208883