首页 文章

重新打开应用程序后,SurfaceView,黑屏

提问于
浏览
2

我有一个活动,它调用一个扩展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)方法 . 有小费吗?

如果你需要更多信息,请告诉我!谢谢

1 回答

  • 1

    在你的暂停方法中,你在错误的位置调用break . 你应该做的是在try和catch括号之后的while循环结束时调用break,并在循环范围之外再次将你的线程设置为null,就在你结束暂停方法之前,如下所示:

    public void pause(){
     running = false;
     while(true){
        try{
            renderThread.join();
        }catch(InterruptedException e){
            //retry
        }
          break;
     }
     renderThread = null;
    }
    

相关问题