메모리 많이 잡아 먹는 것부터 죽일까요....?
깔린 어플이 많고 실행중인 서비스도 많은 단말에서 테스트를 하면
내장 카메라 호출(이때 현 앱은 백그라운드 모드로 감)시나
휴대폰 인증시 받은 인증번호 메세지를 확인하기 위해 메세지함을 열람(이때 현 앱은 백그라운드 모드로 감)시에
OS Kill 이 너무 잘 일어나서요....
왠지 순위가 1순위에 가까운 듯한 기분이 들어서요...
이게 현재 사용하고있는 메모리가 클 경우 그런게 아닐까 싶어서요.....
앱 최초 제작시부터 이부분은 크게 고려치 않고 제작 했었는데 시간이 지나면서
앱이 커지고 기능이 많아지다보니 메모리 누수가 심각한 수준에 이른거 같아서요....
그리고 또 OS Kill을 최대한 안 당하게(아예 안 당할 순 없겠죠...)끔 하려면 어떻게
만드는게 좋을까요..?
가령 메모리누수를 최소화로 해서 Kill 순위를 최대한 뒷 순위로 가게끔 제작한다거나...
또다른 방법이.....? ㅠ_ㅠ
소스상 강종될 오류사항은 없습니다.
메모리 누수가 심하다면 심할뿐.....
그리고 안드로이드 OS는 잘 죽입니다.
위 댓글에 첨부하신 포스트는 제 이슈와 관계 없는 내용이구요
아래는 http://dalinaum-kr.tumblr.com/post/4528344482/android-low-memory-killer 에서 발췌한 내용입니다.
메모리가 부족한 상황에서 최대한의 가용성을 확보하기 위해 가상 메모리를 가장 많이 할당한 프로세스를 죽이는 형태로 되어 있다. 이런 정책은 서버나 임베디드 환경에서 주요 서비스나 주요 어플리케이션을 죽일 수 있다.
안드로이드는 아래의 방법으로 이 문제를 다룬다.
- 어플리케이션은 자신의 상태(adj)를 항상 가지고 있는다. (
/proc/<pid>/lowmem_adj) - 운영체제는 몇개의 메모리 문턱(minfree)을 가지고 있어서 다단계로 메모리 문제를 다룬다.
- 운영체제는 어플리케이션의 상태 변화를 인지하여 어플리케이션 상태를 수정한다.
- adj과 minfree 값은 짝을 이룬다. (0, 1024) (8, 4096)
- minfree값 이하로 메모리가 남은 경우 adj 값 이상의 어플리케이션을 제거한다. (4096 페이지 이하일 경우 adj 값 8 이상의 어플리케이션 중 하나가 제거된다.)
- adj 값이 높을 수록 먼저 제거되고 차순으로는 가상 메모리 양을 비교한다. (4096 페이지 이하일 때 8과 10이 있을 경우 10이먼저 제거된다.)
제가 본문에서 언급한
Kill 순위가 있는것 같다. 그리고 저의 앱이 순위가 높은것 같다... 라는 추측은 위의 내용 중 6번에 해당하는 내용입니다...
링크에 글을 읽어보았지만 잘 죽인다라는 내용은 없습니다. 제가 말한대로 ' OOM Killer로 대표되는데 메모리가 부족한 상황에서 최대한의 가용성을 확보하기 위해 가상 메모리를 가장 많이 할당한 프로세스를 죽이는 형태로 되어 있다. '라고 부족한 상황에서만 어플을 죽인다고 되어있고요. 내용을 읽어보니 일정 메모리를 사용하는 어플중에 우선순위 높은 어플을 죽인다고 되어 있네요.
제 링크 읽어보셨는지 모르겠지만 엔지니어가 직접 쓴 멀티태스킹과 백그라운드, 어플종료에 대한 내용입니다;;;
님이 언급하신 6번에 대한 내용이 링크에 나와있는데.. 흠. 쫌 그렇네요




안드로이드 정책상 메모리가 허락되는한 프로세스를 절대 죽이지 않는 정책을 사용한다고 알고 있습니다.
그리고 안드로이드 개발자가 피치 못할 사정으로 죽일때는 어플 사용 최종 시간과 사용자에게 얼마나 영향을 끼치고 있는지에 따라 Kil이 일어 난다네요. http://android-developers.blogspot.com/2010/04/multitasking-android-way.html
그러므로 os kill보다는 소스에 잘못된 점이 있을 것 같습니다.