캔버스에 Android 페인팅에 스레드가 있습니다. 그것은 모두 잘 작동하지만, 스레드가 아직 그 시간에 이미있는 캔버스에 그리기를 시도하기 때문에 내가 다시 버튼을 누르면 응용 프로그램이 충돌합니다. 코드에서 더 이상 코드 조각에 도달해서는 안됩니다. 내 표면이 파괴됩니다 뒷면 버튼을 누르면에Android : 스레드가 너무 오래 실행되어 중지 된 후에도 의미가 있음
: 나는 false로 thread.setRunning 위에서 보시다시피 그래서
public void surfaceDestroyed(SurfaceHolder holder)
{
boolean retry = true;
thread.setRunning(false);
while (retry)
{
try
{
thread.join();
retry = false;
}
catch (InterruptedException e)
{
}
}
}
을 내 스레드는이
public void run()
{
while (run)
{
Canvas c = null;
try
{
c = sh.lockCanvas(null);
synchronized (sh)
{
doDraw(c);
}
}
finally
{
if (c != null)
{
sh.unlockCanvasAndPost(c);
}
}
}
}
while 루프는해야하지 이 var를 false로 설정하자마자 멈추지 만 여전히 doDraw() 메소드에 들어갑니다. 왜 doDraw (여기에 내 널 포인터 excepetion 얻을) 여전히 호출되고 이해가 안 돼요. 어떤 아이디어?
IntentService도 작동 할 수 있습니다. 왜 모든 튜토리얼이 캔버스에서 그리는 지, intnetService가 아닌 스레드를 사용하는지 알 수 없습니다. 누구든지 이유를 알고 있습니까? – AndyAndroid
이유를 모릅니다. 아마 대부분의 사람들이 Java에서했던 것처럼 같은 방식으로 작업하는 습관 때문일 것입니다. IntentService를 사용하여 작동하는지 확인하고 작동하는지 확인하십시오. –
@AndyAndroid 어떻게 마침내 해결 했습니까? –