[안드로이드] handler leak, static Handler
It's just as it says. The Handler class should be static.
So if you define the Handler
as you would define an inner class, with a WeakReference
to your context:
static class StaticHandler() {
WeakReference<MyActivity> reference;
public StaticHandler(MyActivity activity) {
reference = new WeakReference<MyActivity>(activity);
}
@Override
public void handleMessage(final Message m) {
mStatusText.setVisibility(m.getData().getInt("viz"));
mStatusText.setText(m.getData().getString("text"));
}
}
and then call this:
thread = new LunarThread(holder, context, new StaticHandler(this));
If you use the context
variable in that StaticHandler, then you have to call the WeakReference
to get the context:
MyActivity activity = reference.get();
To stop it from leaking.
I don't know how the rest of the code looks, but you might have to pass a different argument to theStaticHandler
class.
위와 같은 Solution이 있긴 한데.. 흐음 다른 예제로 테스트하고 추후 수정내역 있을 경우 수정본 올리도록 하겠습니다. (최근에 받는 예전 SDK로 빌드된 앱들에서는... 무슨 Handler신봉자들도 아니고 handler를 그렇게 써놨는지......................Memory Leak에................ 이런저런....문제점들이............ 4.0버전대로 올라오면서 main thread에서는 ui와 관련되지 않은 thread를 돌릴 경우 엄격히 제한하는 문제점 또한... )
어쨌꺼나 대부분은 handler가 아닌 Async로 처리를 해도 무방하나, static Handler 를 사용하면 Memory leak을 잡을 수 있기에 이 방법도 적용가능하지 않을까 합니다.