【问题标题】:SurfaceView, Black screen after reopening applicationSurfaceView,重新打开应用程序后黑屏
【发布时间】:2012-11-19 05:42:00
【问题描述】:

我有一个活动,它调用一个扩展 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) 方法。 有什么建议吗?

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

【问题讨论】:

    标签: java android multithreading android-activity surfaceview


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-13
      • 1970-01-01
      • 1970-01-01
      • 2013-05-20
      • 1970-01-01
      • 2017-10-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多