2013-01-29 2 views
1

개발중인 Android 애플리케이션에 이상한 메모리 동작이 있습니다. 응용 프로그램은 잘 돌아가고 있지만 Android SUN 작업 관리자 나 Nexus 7의 "Memory Usage"응용 프로그램과 같이 Android의 "작업 관리자"를 보면 응용 프로그램을 사용하는 동안 사용되는 메모리 양이 빠르게 증가하고 있습니다 수백 메가 (Nexus 7의 경우 600 ~ 700MB)와 같은 미친 양으로 그런 다음 약 200MB로 떨어지거나 다시 성장할 수 있습니다.Android 앱의 이상한 메모리 동작

처음에 나는 나쁜 메모리 누수가 있었고 Eclipse 메모리 분석기 (MAT)에서이 문제를 설명하기 시작했습니다. excellent video. 그러나 문제는 여기에서 모든 것이 괜찮아 보인다는 것입니다. 나는 누출을 야기 할 수있는 활동이나 중복 된 인스턴스를 발견하지 못했으며,보고 된 메모리 양은 훨씬 적다. 문제는 GC 메시지에도 나타나지 않습니다. 의 많은 사진이 있기 때문에 정상이 될 수 힙 양이 결코 50 ~ 60메가바이트 위 않을와

01-29 12:05:44.511: D/dalvikvm(6044): GC_FOR_ALLOC freed 3930K, 24% free 28959K/38096K, paused 17ms, total 17ms 

(: 그래서 나는 6백메가바이트의 작업 관리자에서보고 사용하고,이 같은 로그 캣에있을 수 있습니다 앱). MAT의 숫자가 일치합니다.

내 응용 프로그램에 메모리 누수가 있는지 확인하고 싶습니다. GC 메시지와 MAT가 문제를보고하지 않더라도 작업 관리자가 이러한 높은 메모리 사용량을보고한다는 것이 이상하다는 것을 알게되었습니다. 어쩌면 여기에있는 누군가가 이미 이상한 행동을 당했고 어떤 일이 벌어지고 있는지에 대한 단서를 줄 수 있을까요?

답변

1

GC 메시지에는 Dalvik 힙의 내용 만 표시됩니다. 네이티브 힙은 시스템이 사용자를 죽이기 전까지는 제한없이 성장할 수 있습니다. 포어 그라운드에있을 때만 그렇게하는 것이 싫은 경우입니다. 앱에 할당을 유발할 수있는 기본 구성 요소가 있습니까?

개발자/루팅 된 장치 인 경우 "procrank"도구는 메모리 사용에 대한 요약을 제공합니다. "showmap"도구를 사용하면보다 자세한 분석을 수행 할 수 있습니다.

DDMS에는 네이티브 메모리 사용을 검사하기위한 몇 가지 (공식적으로 지원되지 않는) 도구가 있습니다. Google은 "ddms native heap"을 사용하여 몇 가지 지침을 찾습니다.

1

시험 시간이 끝난 후 마침내 문제가 발견되었습니다. 우울함에 의해 짐작할 수 있듯이 누출은 달빅의 범위에서 벗어났습니다. 그것은 Typeface.createFromAsset 인해 다음과 같은 버그가 사실이었다

http://code.google.com/p/android/issues/detail?id=9904

이 방법은 자산 스트림을 유출. 내 응용 프로그램은 사용자 지정 TextView를 사용하여 사용자 지정 글꼴로 텍스트를 표시하며 대부분의 레이아웃 파일에 사용되므로 Dalvik의 힙이 아닌 많은 RAM이 빠르게 유출되었으므로 평소대로 사용하는 것이 매우 어려웠습니다. 도구.