2012-11-30 33 views
2

我有一個活動,它調用一個擴展SurfaceView的類並實現Runnable ,並將activity類的contentView()設置爲surfaceview類的實例。儘量減少活動後,我停下來破壞螺紋: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(畫布)方法只畫一次。 任何提示?

如果你需要更多的信息讓我知道! 謝謝

回答

1

在你的暫停方法中,你在錯誤的地方打電話休息。你應該做的是在try和catch括號後的while循環的結束通話休息,環路範圍之外重新設置你的線程爲null,你結束暫停方法之前,像這樣:

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

這應該工作 – rdawg71481

相關問題