336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
제가 하루 동안 갑자기 발생한 Memory over flow 때문에...
원래 제출 해야하는 날보다 하루 미루게 되었던 대 사건의 원인을 적어볼까 합니다.
- 테스트 폰 : HTC 디자이어 HD, Sky Vega X
- 문제:
LiveWallpaper의 설정을 여러 번 바꾼 후에, 갑자기 핸드폰이 멈춰버리는 대 사건이!-0-
- 원인:
거의 5시간을 걸쳐 디버깅 하고, 구글리을 해서 알아낸 결과!
heap memory가 사라지지 않고, 계속 쌓이는 것이었습니다.
처음 Bitmap의 초기화를 잘 못했나 해서 받아들인 Bitmap에 전부 초기화를 했습니다.
[Bitmap 초기화 방법]
gl.glGenTextures(textures.length , textures, 0);
bitmap = null;
=> 위와 같이 텍스처에 설정을 해 놓으면 다시 Bitmap을 쓸 일이 없기 때문에 초기화를 꼭! 해주세요.
하지만!!
heap momory는 줄어들지 않고 계속 차지 하고 있는 것입니다.(참고로, 전 이미 모든 Bitmap에 recycle를 해준 상태였음)
그래서 Texture에 문제다! 라고 생각한 저는 바로 구글링을 다시 시작했습니다.
찾아보면.. 거의 Bitmap에 대한 이야기가 대부분 이더군요.
근데!! 문제가 된 것은 단순합니다.
텍스쳐를 처음 설정할 때(추가할 때)는 gl.glGenTextures 로써 포인터를 지정하지만,
텍스쳐를 다른 Bitmap으로 수정할 때는 gl.glGenTextures를 사용하면 안됩니다.!!!!
정말 중요한 부분 입니다. 저 함수를 지정하면 별도의 텍스쳐 주소를 지정해주므로,
다시 프로그램이 종료가 되지 않은 상태에서는 계속 쌓이게 되어 버립니다.
꼭 텍스쳐를 변경할 부분이 있으시면
load함수와 set함수 2개를 만들어 두세요.
}
위 두 함수를 참고하세요^^
원래 제출 해야하는 날보다 하루 미루게 되었던 대 사건의 원인을 적어볼까 합니다.
- 테스트 폰 : HTC 디자이어 HD, Sky Vega X
- 문제:
LiveWallpaper의 설정을 여러 번 바꾼 후에, 갑자기 핸드폰이 멈춰버리는 대 사건이!-0-
- 원인:
거의 5시간을 걸쳐 디버깅 하고, 구글리을 해서 알아낸 결과!
heap memory가 사라지지 않고, 계속 쌓이는 것이었습니다.
처음 Bitmap의 초기화를 잘 못했나 해서 받아들인 Bitmap에 전부 초기화를 했습니다.
[Bitmap 초기화 방법]
gl.glGenTextures(textures.length , textures, 0);
gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[i]);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_NEAREST);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
bitmap.recycle();bitmap = null;
=> 위와 같이 텍스처에 설정을 해 놓으면 다시 Bitmap을 쓸 일이 없기 때문에 초기화를 꼭! 해주세요.
하지만!!
heap momory는 줄어들지 않고 계속 차지 하고 있는 것입니다.(참고로, 전 이미 모든 Bitmap에 recycle를 해준 상태였음)
그래서 Texture에 문제다! 라고 생각한 저는 바로 구글링을 다시 시작했습니다.
찾아보면.. 거의 Bitmap에 대한 이야기가 대부분 이더군요.
근데!! 문제가 된 것은 단순합니다.
텍스쳐를 처음 설정할 때(추가할 때)는 gl.glGenTextures 로써 포인터를 지정하지만,
텍스쳐를 다른 Bitmap으로 수정할 때는 gl.glGenTextures를 사용하면 안됩니다.!!!!
정말 중요한 부분 입니다. 저 함수를 지정하면 별도의 텍스쳐 주소를 지정해주므로,
다시 프로그램이 종료가 되지 않은 상태에서는 계속 쌓이게 되어 버립니다.
꼭 텍스쳐를 변경할 부분이 있으시면
load함수와 set함수 2개를 만들어 두세요.
public void loadGLTexture(GL10 gl, Bitmap bitmap) {
if(bitmap == null ){
Log.e("DEBUG","loadGLTexture : Bitmap is null!!!!!!!!!!");
return;
}
//텍스처 포인터 설정
gl.glGenTextures(textures.length , textures, 0);
gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[index]);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_NEAREST);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
bitmap.recycle();
bitmap[i] = null; }
public void setGLTexture(GL10 gl, Bitmap bitmap) {
if(bitmap == null ){
Log.e("DEBUG","setGLTexture : Bitmap is null!!!!!!!!!!");
return;
}
gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[index]);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_NEAREST);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap[i], 0);
bitmap.recycle();
bitmap[i] = null;
위 두 함수를 참고하세요^^
'나의 플랫폼 > 안드로이드' 카테고리의 다른 글
[Android] Bitmap을 확장 축소할 경우 (1) | 2011.04.12 |
---|---|
[Android] drawable-hdpi,drawable-mdpi,drawable-ldpi (0) | 2011.04.07 |
[Android] Bitmap 이미지 가로 세로 회전 (5) | 2011.04.04 |
[Java] 시침과 분침 각도 이동 계산 (0) | 2011.04.04 |
[Android] Opengl 사용 시 Antialiasing 작용 (2) | 2011.04.04 |