2011-12-30 3 views
2

공유 라이브러리를 사용하는 작은 응용 프로그램을 개발했습니다. 내 장치 힙 메모리에 안드로이드 응용 프로그램을 실행할 때 빠르게 증가하고 있습니다. 나는 gc()를 사용하여 그것을 줄이려고하지만 그게 나를 위해 작동하지 않습니다. 한 번에 로우 메모리와 같은 메시지를 받고 더 이상 백그라운드 프로세스와 내 애플 리케이션을 종료합니다. 어떻게 해결할 수 있을까요?android에서 메모리 누출 처리

+0

를 게시하는 무슨 말을 할 때까지 posssible없는 클래스의 새로운 인스턴스를 생성 메모리/자원을 할당 어떤 루프가 있습니까? 이러한 루프 코드를 표시하십시오 – sll

+0

사실 라이브 벽지 응용 프로그램입니다. 그 있음, 나는 jni 코드에서 ffmpeg를 사용하여 비디오 파일을 컴파일하고 배경 화면으로 OpenGL을 사용하여 벽지로 비디오 파일을로드합니다. jni 파일에서 av_malloc 함수를 사용하고 있습니다. – Satheesh

+0

고리가 있습니까? – sll

답변

1

GC를 사용할뿐만 아니라 더 이상 필요하지 않은 개체에 대한 참조를 삭제합니다. GC는 참조 된 개체를 회수하지 않습니다. 또한 JNI 라이브러리가하는 일을주의 깊게 살펴보고 시작 스레드 메모리를 할당 할 경우 필요한 예방 조치를 취하십시오.

더 자세한 대답은 당신이 사용하고 소스

+0

사실 라이브 벽지 응용 프로그램입니다. 그 있음, 나는 jni 코드에서 ffmpeg를 사용하여 비디오 파일을 컴파일하고 배경 화면으로 OpenGL을 사용하여 벽지로 비디오 파일을로드합니다. – Satheesh

+0

수동으로 참조를 삭제해야합니까? 실행이 참조 선언 범위를 벗어 났으므로 참조가 자동으로 삭제됩니다. – sll

+0

다릅니다. 실행 범위는 그와 아무 관련이 없습니다. onPause() 후 언젠가 Android 프레임 워크는 당신의 활동에 대한 참조를 삭제하고 가비지 콜렉션에 사용할 수있게 만들었습니다. (그리고 makind 객체는 차례대로 삭제 될 것입니다.) 그러나 정적 인 활동 변수 (일반적인 오류, 활동은 모든 곳에서 필요한 문맥이기 때문에) 그것은 모든 참조 자료가 당신의 기억을 영원히 막히는 상태에서 전혀 재생되지 않을 것입니다 –