SurfaceView를 사용해서 그래픽을 업데이트하는 프로그램입니다.
중간에 홈키로 나갔다가 다시 게임을 실행하면 onPause, onResume이 잘 실행되어서 돌아가는데요,
제 메뉴를 통해서 스레드를 중지하고 홈키를 누를시, 다시 게임으로 돌아오면 먹통이 되어버립니다.
(재시작시 onResume, SurfaceCreated를 부르지 않네요)
혹시 왜 그런지 조언을 부탁드릴수 있을까요?
* 아래는 제 메뉴 입니다.
public boolean onCreateOptionsMenu(Menu menu)
{
menu.add(0, 1, 0, "Pause / Resume");
menu.add(0, 2, 0, "Sound On / Off");
menu.add(0, 3, 0, "Exit");
return true;
}
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case 1:
if (gr.threadWait)
{
gr.runThread.resumeThread();
}
else
{
gr.runThread.pauseThread();
}
break;
case 2:
if (gr.mute)
{
gr.mute = false;
}
else
{
gr.mute = true;
}
break;
case 3:
System.exit(0);
break;
}
return true;
}
* 아래는 surfaceView안에 thread 제어 관련 부분 입니다.
... 스레드 내부에서
public void pauseThread()
{
threadWait = true;
synchronized (this)
{
this.notify();
}
}
public void resumeThread()
{
threadWait = false;
synchronized (this)
{
this.notify();
}
}
public void surfaceCreated(SurfaceHolder holder)
{
try
{
runThread.start();
threadRunning = true;
}
catch (Exception e)
{
runThread = null;
runThread = new RunThread();
runThread.start();
threadRunning = true;
}
}
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3)
{
}
public void surfaceDestroyed(SurfaceHolder holder)
{
Log.v("MyLog","Surface Destroyed");
boolean running = true;
threadRunning = false;
while (running)
{
try
{
runThread.join();
running = false;
} catch (InterruptedException e) {}
}
}
되돌아 올때 onStart도 안불리나요?