본문 바로가기

ANDROID

[안드로이드] onClickListener와 onTouchListener에 의한 Memory Leak 잡기

저번에 메모리 leak을 한번 해결했음에도 불구하고 다시 때때로 발생하는 메모리 leak 때문에 골머리를 썩고 있다.


다양하게 발생하고 있는 leakage 중에 onClickListener, onTouchListener와 관련된 부분들이 있었고, 이를 제하기 위해 서치를 했다.


우선 액티비티에서 버튼등에 설정해 준 Listener가 어느 부분에서 선언되느냐, 그리고 어느 곳에서 설정되느냐에 따라 


Activity가 종료 된 이후에도 메모리에 관련 값을 참조한 채 상주하게 되는 경우가 있다 판단하였고


해결책으로 설정해두었던 Listener들을 onDestroy 부분에서 다시 null 로 전부 설정해 줌으로써


이후 OnClickListener 관련 Memory Leak이 어느정도 줄어든 것으로 보여진다.




다양한 원인과 다양한 해결방법이 있을 것이고 이 방법도 마찬가지로 완벽한 방법이 아닐 수 있다.


어쨌거나 새는 물바가지 같은 앱의 구석구석을 계속 틀어막아 볼 계획이다.. 


 + 


추가로 계속 테스트 결과 아직 관련된 메모리들이 완전히 제거되지 않은 것이 확인되고 있는데, 이 방법을 통해 액티비티 종료와 함께


곧바로 메모리 안에서 즉각적으로 제거하지는 못해도, 계속 축적되는 것은 막아주는 정도는 가능해진 것이 아닌가 정도 결론을 내릴 수 있나 싶다.




참조 : 


https://stackoverflow.com/questions/5002589/memory-leakage-in-event-listener?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa


https://stackoverflow.com/questions/5195321/remove-an-onclick-listener?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa


https://medium.com/@joongwon/android-memory-leak-%EC%82%AC%EB%A1%80-6565b817a8fe



향후 메모리 leak 관련 참조하기 좋을 포스트 :


http://kwongyo.tistory.com/3