안드로이드에서 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
Posted by 자바리즘
,