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

Bitmap createBitmap 메모리누수(?) 어떻게 해결해야 하나요?

0 추천
Bitmap createBitmap  을 한 스레드에서 계속 해주고 있는데요

실시간으로 영상을 출력하는 내용이라 스레드에서 bitmap을 생성하고 있습니다

mBitmap = Bitmap.createBitmap(m_Frame, 640, 480, Bitmap.Config.ARGB_8888);

logcat 에

D/dalvikvm: GC_FOR_ALLOC freed 1802K, 20% free 8046K/10008K, paused 6ms, total 6ms

메시지가 계속 출력되고 있습니다.

mBitmap.recycle();
mBitmap = null;

을 추가로 넣어주어도 계속 메시지가 출력이되는데요

createBitmap 메모리관련 해결 방법이 있을까요?
oblab (1,490 포인트) 님이 2016년 6월 7일 질문

2개의 답변

0 추천

동영상 출력에 비트맵을 사용하는건.....

다른 방법을 강구 하셔야 할 듯합니다.

종종 recycle()을 메모리에서 완전히 해제가 되는 것으로 오해 하시는 분들이 있는데....

recycle()은 메모리 연결을 해제 시켜주어 다음 가비지컬렉팅때 메모리를 해제하기위한 준비 일뿐 메모리리 해제가 아닙니다.

또한 가비지 컬렉팅이 언제 이루어 질지는 알 수 없구요~~!

메모리가 너무 걸리신다면 다른 방법을 강구 해야 함이 옳다고 봅니다.~~!

ThisPlus (46,920 포인트) 님이 2016년 6월 7일 답변
byte 데이터를 실시간으로 얻어서 비트맵으로 변환후 draw를 하는데요
다른 방식으로 출력하는 방법이 있을까여??
GLSurfaceView를 통해 Draw하시는 것을 추천합니다.
bitmap으로 그리면 YUV이미지를 RGB로 변경해서 그려야 하는데,
openGL을 쓰면 변환속도가 단순 CPU로 연산하는 것보다 빠르다는 애기가 있습니다.

난이도가 약간 있어서 문제지만..
exoplayer 쪽 코드를 살펴 보시면 예제가 있으니. 참조하셔서 하시면 될 겁니다.
0 추천

 

매 화면마다 Bitmap이 새로 생성된다면....으으...

NDK로 가시는게...

언뜻 보니 full pixel computation과 draw frame animating에 관련된 NDK 예제(Sample plasma)가 있는것 같네요.

 

NDK - https://developer.android.com/ndk/index.html

Sample plasma - https://github.com/googlesamples/android-ndk/tree/android-mk/native-plasma

칠리님 (10,910 포인트) 님이 2016년 6월 8일 답변
...