Activity의 OnPause, OnResume 그리고 SurfaceView의 Thead와의 관계에 대하여
구글링으로도 쉽게 나오지 않아서 블로그에 올려야 겠다고 생각을 했다.
제대로 만들었으면
화면을 껏다가 켜도(Screen Off and On)
SurfaceView의 Thread가 다시 돌아가야 한다.
결론으로 정답은 다음과 같다.
Activity
public void onPause() { super.onPause(); view.pause(); } @Override protected void onResume() { super.onResume(); view.resume(); }
SurfaceView
public void surfaceCreated(SurfaceHolder holder) { isItOk = true; thread = new Thread(this); thread.start(); } public void surfaceDestroyed(SurfaceHolder holder) { try { if (thread != null) thread.join(); } catch (InterruptedException e) {} thread = null; } public void pause() { isItOk = false; while (true) { try { thread.join(); } catch (InterruptedException e) {} break; } thread = null; } public void resume() { isItOk = true; if (thread == null && holder.getSurface().isValid()) { thread = new Thread(this); thread.start(); } } @Override public void run() { Canvas canvas; while (isItOk) { canvas = holder.lockCanvas(); canvas.drawColor(Color.rgb(184, 210, 234)); holder.unlockCanvasAndPost(canvas); } }
명료한 답입니다.
Screen Off 했다 On해도 다시 돌아가고
back key를 눌러도, Background에 갔다가 다시 와도
다시 정상적으로 돌아갑니다 ^^
댓글 없음:
댓글 쓰기