개발용
[Android] Handler 이용 시 메모리 누수 본문
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
#참고 :