안드로이드에서 Handler 클래스는 유용한 클래스이다.
메시지 방식으로 사용하는 이 클래스는 메시지를 보내고, 받는 곳에서는 기능을 구현하면 된다.
그러나, 우리는 이너 클래스(inner class) 방식으로 종종 사용하곤 한다.
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
//TODO
}
}
위의 방식이 간편하지만, 메모리 누수를 가져올 수 있다고 한다.
handler 를 static final 로 선언하고 WeakReference 를 참조하여 Activity 의 변수들을 참조하여 사용하면 좋을 것 같다.
public class MyActivity extends Activity {
private MyHandler mHandler = new MyHandler(this);
private String mText;
@Override
protected void onCreate(Bundle savedInstanceState) {
mText = "Example";
}
private static final class MyHandler extedns Handler {
private final WeakReference<MyActivity> ref; //Weak 레퍼런스 선언
public MyHandler (MyActivity act) {
ref = new WeakReference<>(act); //Weak 레퍼런스 생성
}
@Override
public void handleMessage(Message msg) {
MyActivity act = ref.get();
if( act != null ) {
//TODO
//act 를 통해서, act 의 변수들을 참조 할 수 있다.
if(act.mText.isEmpty() ) {
}
}
}
}
}
출처 : https://medium.com/@joongwon/android-memory-leak-%EC%82%AC%EB%A1%80-6565b817a8fe
'안드로이드 > TIP' 카테고리의 다른 글
Multidex, ClassNotFoundException (0) | 2017.11.27 |
---|---|
Aapt2Exception (0) | 2017.11.27 |
가로 세로 전환 시, 액티비티 재 생성되는 문제 (0) | 2017.10.26 |
HttpUrlConnection 세션 (0) | 2017.10.18 |
단순히 특정앱만 호출하자! (0) | 2017.09.27 |