마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

메모리가 점점 쌓이고 줄질 않아요 ㅜㅜ

0 추천
현재 AQuery 를 사용하여 내부 ajax메서드로

JSON 결과물을 파싱하여 리스트뷰로 뿌려주는 작업을 하는 앱을 하나 만들었습니다.

 

근데 문제는 이게 오래 켜두어야 하는데요..

그래서 모니터링해보니 점점 allocate memory 영역이 늘어나는 겁니다..

현재 서비스 중인데, OOM 은 발생하지 않으면서 그냥 폰이 먹통이 되어버린다고 하더라구요..

여태 겪었던 먹통은 그저 무한루프때문 이었는데..

따로 Fabric 을 사용해서 그동안 리포트 받아왓는데 이게 아예 멈춰버리다보니 리폿도 못받는 상황이라

어디가 문제일까 생각하다 메모리라 생각해서 이렇게 질문 드립니다..

 

안드로이드 스튜디오의 Allocation Traking 기능으로 살펴봤는데

Aquery 에 AbstractAjaxCallback 부분이 가장 많이 호출되고 가장 많은 자원을 사용하는것 같았습니다

근데 따로 Aquery에는 저 콜백에대한 메모리 회수관련 메서드가 없는데요..

 

이럴때는 어떻게 관리를 해줘야할까요?

 

이해를 돕기위해 정리해 보겠습니다.

 

1. Aquery 라이브러리를 이용하여 비동기 네트워크작업을 합니다.

2. AQuery의 AjaxCallback 을 이용하여 비동기 작업에 대한 결과물을 콜백 받습니다.

3. JSON 내용이 있다면 리스트뷰에 뿌려주고 아니면 작업하지 않습니다.

etc) 혹시 비동기 작업시마다 new로 할당받은 리스너나 어댑터들이 문제인가 해서 바깥으로 빼버려서 한번만 선언하고 재활용하는 식으로 돌려보앗으나 여전히 약 0.04MB 씩 allocate memory가 증가합니다..

막 한 두어시간 켜놓으면 먹통된다는 리폿을 받았습니다. System.gc() 를 호출해도 래퍼런스를 해제하는 곳이 없던지 따로 메모리 사용량이 줄진 않고, 모니터(안드로이드 스튜디오의 자체기능)의 initiate GC 를 해출해주면 사용 용량이 반으로 줄어듭니다.

 

어떻게 해결해야 할까요 ㅜㅜ
익명사용자 님이 2016년 10월 19일 질문

1개의 답변

0 추천
데이타는 파일 저장방식인가요? 아니면 sqlite디비를 쓰시나요?
한라산산적 (340 포인트) 님이 2016년 10월 19일 답변
데이터는 웹서버에서 따로 가져옵니다 ㅜㅜ
...