我有一个活动,它调用一个扩展SurfaceView并实现Runnable的类 并将activity类的contentView()设置为surfaceview类的实例。在最小化活动后,我暂停并销毁线程:
public void pause(){
running = false;
while(true){
try{
renderThread.join();
break;
}catch(InterruptedException e){
//retry
}
}
}
当活动恢复时,我重新创建线程:
public void resume(){
running = true;
renderThread = new Thread(this);
renderThread.start();
}
请注意,这些是在onPause()和onResume()活动方法中调用的。
public void run(){
while(running){//thred loop
if(!holder.getSurface().isValid())
continue;
if(puzzleDrawn!=true) {
canvas = holder.lockCanvas();
drawPuzzle(canvas);
holder.unlockCanvasAndPost(canvas);
}
}
}
public void drawPuzzle(canvas){
//draws on canvas
}
当我尝试重新打开应用程序时,我看到一个黑屏。 我需要绘制一次drawPuzzle(canvas)方法。 任何提示?
如果您需要更多信息,请告诉我们! 感谢
答案 0 :(得分:1)
在你的暂停方法中,你在错误的地方叫断。你应该做的是在try和catch括号之后的while循环结束时调用break,并在循环范围之外再次将你的线程设置为null,就在你结束暂停方法之前,如下所示:
public void pause(){
running = false;
while(true){
try{
renderThread.join();
}catch(InterruptedException e){
//retry
}
break;
}
renderThread = null;
}