@Override
public void onDestroy() {
requestQueue.stop();
requestQueue.start();
map.onDestroy();
map = null;
UIUtil.recycleAllImageBitmap((ViewGroup) ((ViewGroup) this.findViewById(android.R.id.content)).getChildAt(0));
imageBitmap.recycle();
resizedBitmap.recycle();
Glide.get(this).clearMemory();
System.gc();
RefWatcher refWatcher = GlobalApplication.getRefWatcher(this);
refWatcher.watch(this);
super.onDestroy();
}
액티에서 volley로 서버의 이미지를 불러오고, Glide로 이미지뷰에 넣어주고 구글맵뷰도 불러오고 있습니다.
이 액티를 들어갔다 나오면 메모리가 너무많이 쌓여서 위와 같이 코드들을 넣어주었습니다.
그런데도 크게 차이는 못느끼겠습니다, 들어갔다 나왔다 10번정도 반복하면 앱이 재시작(완전 재시작은 아니고 해당 액티에서 검은색화면 뜨면서 꺼졌다 켜진뒤 보던 화면이 다시 뜨고, 메모리는 초기화됩니다)
프로파일러에서 보니깐 bitmap이 차지하는 양이 상당하더라고요, 그래서 글라이드로 이미지 넣어줄때 이미지 크기를 낮게 잡아봤더니 메모리 상승폭이 줄어드는게 체감은 되는데
여전히 메모리가 계속 쌓입니다..
volley는 메모리 누수 버그가 있었는데 fix됬다고 하는 최신버전 쓰고있고요,
onDestroy에서
이미지뷰는 따로 헬퍼클래스에서 모든 이미지뷰에 null을 넣어주고 있고요,
구글맵도 검색해본결과 메모리 leak을 해소하는 방법 사용해보고 있고
모든 bitmap 다 recylcle 시키고 gc까지 명시해주고 하는데도
메모리가 계속 쌓이니 미치겠습니다ㅠ
혹시 제가 놓친 부분이 있거나 bitmap으로 인한 메모리 누수에 도움되는 방법 있으면 알려주시면 감사하겠습니다.!