2

SurfaceView を拡張して Runnable を実装し、アクティビティ クラスの 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) メソッドを一度だけ描画する必要があります。任意のヒント?

さらに情報が必要な場合はお知らせください。ありがとう

4

1 に答える 1

1

一時停止メソッドで、間違った場所でブレークを呼び出しています。次のように、try および catch ブラケットの後に while ループの最後で break を呼び出し、ループの範囲外で、一時停止メソッドを終了する直前にスレッドを再度 null に設定する必要があります。

public void pause(){
 running = false;
 while(true){
    try{
        renderThread.join();
    }catch(InterruptedException e){
        //retry
    }
      break;
 }
 renderThread = null;
}
于 2013-06-06T14:14:44.113 に答える