2017년 2월 7일 화요일

SurfaceView 기반 앱 작성시 주의사항

 게임 관련 앱을 만드는 중 스레드가 시작되고도 화면이 한동안 나오지 않아 원인을 찾느라 고생한 적이 있다.

원인은 SurfaceView를 그려주는
Thread에서,


try {
c = holder.lockCanvas(null);// 캔버스를 얻는다

...
실제그리는 코드.
...
}
catch{}
finally {
if (c != null) {
holder.unlockCanvasAndPost(c);
postInvalidate();
}
}

위의 실제 그리는 코드에 Draw관련 함수가아닌,
개체생성(New) 등의 복잡한 코드가 있었기 때문이었다.

명심할 부분은
c = holder.lockCanvas(null);// 캔버스를 얻는다
holder.unlockCanvasAndPost(c);
이 두 명령어 사이엔 되도록 draw계열의 함수만 넣어야한다.

댓글 없음:

댓글 쓰기