2012-11-30 2 views
2

У меня есть действие, которое вызывает класс, который расширяет SurfaceView и реализует Runnable и устанавливает contentView() класса активности экземпляру класса viewview. После того, как свести к минимуму активность, я паузу и уничтожить нить: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), который нужно нарисовать только один раз. любые подсказки?

если вам нужна дополнительная информация, дайте мне знать! Thanks

ответ

1

В вашем методе паузы вы вызываете перерыв в неправильном месте. То, что вам нужно сделать, это разбить вызов в конце цикла while после скобок try и catch и снова установить нулевой поток за пределы цикла и как раз перед тем, как вы закончите свой метод паузы, например:

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

Это должно работать – rdawg71481

Смежные вопросы