2015년 3월 2일 월요일

SurfaceView 와 OnResume, OnPause, Thread

Activity 안에 SurfaceView 넣어서 앱을 만들 때,

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에 갔다가 다시 와도
다시 정상적으로 돌아갑니다 ^^


댓글 없음:

댓글 쓰기