안드로이드 개발 질문/답변
(글 수 45,052)
class GameThread extends Thread {
private long lastTime;
public void run(){
while(alive){
lastTime = System.currentTimeMillis();
canvas = holder.lockCanvas(null);
try {
synchronized(holder){
switch(state){
case STATE_TITLE:
main.process();
main.draw(canvas);
break;
case STATE_RUN:
game.process();
game.draw(canvas);
break;
}
}
}finally{
if(canvas != null){
holder.unlockCanvasAndPost(canvas);
}
}
lastTime = System.currentTimeMillis() - lastTime;
if(lastTime < 30){
try{
sleep(30 - lastTime);
}catch(Exception e){
}
}
}
}
};
쓰레드는 이런식인데 엄청나게 느린폰이 많더라구요 연산을 그렇게 많이하는것도 아닌데 무슨문제점이 있을까요.




thread 안에서 동기화 로직을 구현할 경우 느려질수 있습니다..그렇기땜에 synchronize 사용에 대해선 신중하게 해야 하는거죠..같은 기능의 여러개의 thread가 동시에 돌더라도 synchronized 블럭 실행하는 부분에 있어서는 동시에 도는게 아닙니다..그 부분 실행하는데 있어서는 한 스레드만 도는거죠..근데 canvas와 관련된거면 synchronized를 할 필요가 없을텐데요..이미 lockCanvas 함수를 도는 시점에서 canvas에 대한 접근은 한 스레드만 가능하고 나머지 다른 스레드는 lock을 걸은 thread가 unlockandPost를 하기 전까지 대기 상태에 놓입니다..때문에 그 함수 실행으로 인한 동기화는 맞춰집니다..