티스토리 뷰

Mobile/Android

[Android]Handler Lint Error

out of coding 2015. 1. 21. 01:37

Lint라는 참 마음에 드는 녀석이 있다.

그런데 개발자들 입장에서는 이렇게 자꾸 에러뜨고, 경고가 발생하게 되면 조금은 당혹스럽긴 하지만. 너무나 좋아서 말로 다할수 없다.

개발할때 주로 생각하여야 하는것은, 작은 경고라도 무시하지 말아야 할 자세인것이다.


본론으로 돌아와서,

왜 이런 에러를 나오게 만들었느냐 하는 문제가 있다.


개념적으로 생각을 한다면, Handler를 만든 Activity가 존재한다고 생각을 해보자.

그런데 Activity가 참조하여야 하는 녀석이 존재하게 된다면, GC가 되지 않는 문제가 발생하게 된다.

이유는 Handler에 대한 Message가 남아 있는 경우에는, GC가 되지 않는 것이다.

뭐 나중에는 슬며시 사라질수도 있지만, 어떤 경우에는 계속 남아서, 메모리릭이 발생할수 있는것이다.


그래서 이런 Handler를 WeakReference로 만들어 주어서 해당 부분을 해결하여 주도록 한다.


public class WeakReferenceHandler extends Handler {

	public interface HandleMessage {

		public void handleMessage(Message msg);
	}

	private final WeakReference<HandleMessage> mWeakReference;

	public WeakReferenceHandler(HandleMessage handleMessage) {

		mWeakReference = new WeakReference<WeakReferenceHandler.HandleMessage>(handleMessage);
	}

	@Override
	public void handleMessage(Message msg) {

		super.handleMessage(msg);

		HandleMessage handleMessage = mWeakReference.get();
		if(handleMessage != null) {
			handleMessage.handleMessage(msg);
		}
	}
}

위의 내용처럼 개발을 하고, 생성자에 null을 넣어주게 되면, 그냥 일반적으로 post메소드만 사용하는 녀석으로 이용가능하며

HandlerMessage interface를 넣어주게 된다면, 해당 부분에 기존에 우리가 Handler에서 받던 handleMessage를 사용할수 있겠다.


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함