2018년 1월 9일 화요일

Android using MainHandler cause memory leak

이 글의 원본은
https://www.androiddesignpatterns.com/2013/01/inner-class-handler-memory-leak.html
이며, 번역본은
http://regularmotion.kr/android-how-to-leak-a-context-handlers-inner-classes/
에서 작성된것을 옮겨온 포스트 입니다.

기억이 필요로 하며, 나름대로 정리를 위해 다시 가져온 글 입니다. (+ 번역본 서버가 안정적이지 못해서 겁에 질림)


MainActivity 에서 MainHandler 를 선언하여 handleMessage 를 사용하려고 하였으나, 이전부터 영문모를 경고를 뿌리고 있었습니다.
this handler class should be static
이 문제를 조금더 자세히 알고자 구글링을 한 결과, 경우에따라서 심각한 메모리 누수를 유발할 수 있다는 경고문이었다는것을 알았습니다.

요는 이러합니다.
MainHandler를 특정 클래스에서 선언하여, 사용하는데, 만일 delayedMessage 따위로, 메시지 처리 시간이 지연되는 상황에서, 해당 클래스가 onDestroy 됬을때 나타납니다.

Handler는 message 를 처리할 때 까지 garbage collect에 해당하지 않게 됩니다, 하지만 MainHandler를 선언한 클래스 또한 garbage collector 정책에 따라 사라지지 않는 문제가 발생합니다.

혹자는 극히 드문 케이스 가 될것 이라고 하지만, 이는 확실히 크나큰 문제였습니다.

이러한 가비지가 쌓이다가 터질 상황이 언제든 발생이 가능하기 때문입니다.

해결하기 위해서, low Handler를 extend 한 static class를 만들어, 사용하면, 이러한 문제가 해결 될 수 있다고 합니다.

WeakRefrence 를 사용하게되면, garbage collection 에서 선언한 클래스까지 찌꺼기로 남는 문제를 해결 할 수 있는듯 합니다.

자세한 셈플 코드는 원문 혹은 번역본 을 방문하시면 나옵니다.

2018년 1월 8일 월요일

nodeJs using Multer / Sharp


Above image is my multer usage code.
I tryin to modify multer for support android/retrofit


below code is store image into memory w/using sharp, also thumbnail images are store in memory.