많은 예제에서는 SurfaceView의 스레드 안에서 그냥 연산작업을 처리하는데요..
전 가끔 ANR이 나서 알아보니까... 복잡한 연산은 다른 스레드로 빼라는 말씀들이 많으시더라고요.
제 스레드는 아래와 같이 생겼습니다.
class RunThread extends Thread
{
public void run()
{
canvas = null;
while (threadRunning)
{
canvas = holder.lockCanvas();
try
{
synchronized (holder)
{
cAction.setStage();
cAction.drawBackground();
cAction.drawCells();
cAction.drawTower();
cAction.drawMonster();
cAction.drawMissile();
cAction.drawExplosion();
cAction.drawReward();
cAction.drawTempTower();
cAction.drawSubMenu();
cAction.drawBuildMenu();
cAction.drawItemMenu();
cAction.drawTexts();
cAction.drawMessage();
cAction.checkGameStatus();
try
{
Thread.sleep(10);
} catch (Exception e) {}
}
}
finally
{
if (canvas != null)
{
holder.unlockCanvasAndPost(canvas);
}
}
synchronized (this)
{
if (threadWait)
{
try
{
wait();
} catch (Exception e) {}
}
}
}
}
여기서 만약에 다른 작업스레드로 분리를 한다면... 어떤방식으로 되는것인가요?
작업스레드에서 계산을하고 위 메인 스레드는 스레드대로 돌아가게 해보았더니, 작업 스레드는 처리속도가 엄청 빨라서 속도가 맞지 않더라고요.
스레드를 분리하는것에 대해서 조언을 얻을수 있을까요?