안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요 초보개발자 도깨비입니다.
제가 현재 개발하고 있는 게임에서 3개의 int형 변수 A, B, C를 각각의 A_handler, B_handler, C_handler에서
A는 0.1, B는 0.12, C는 0.15초마다 1씩 증가시켜 100이 되면 서로다른 특정 이벤트가 발생하고
다시 0으로 초기화 되는 일을 반복적으로 수행되게끔 하였습니다.
핸들러들은 모두 위에 코드식으로 구현되어 있습니다. 여기서 질문이 있습니다.
1 ) 3개의 hadler를 좀더 효율적으로 관리할 수 있는 방법은 없는 건지 알고싶습니다. 물론 세부적으로 정확히 하는 일은
틀리지만 기본적인 틀은 비슷하기에 혹시 간단히 합칠수 있는 방법을 알고싶습니다.
2 ) 지금 hadler가 구현되어 있는 클래스는 surfaceview를 상속받고 callback을 implements한 클래스 입니다. 여기서 handler를
생성할 때 new Handler()는 main쓰레드에서 동작이 되어진다고 알고있습니다. 혹시 이렇게 되면 게임의 속도 저하에 영향을 끼치는지
알고싶습니다. 만약 영향을 끼친다면 이 핸들러들을 main이 아닌 다른 Thread로 동작하게끔 하는 방법을 알고싶습니다.
두가지 질문 다 어떤 답변이든지 어떠한 예제링크이건 상관없습니다. 부디 도와주세요~!!
제가 현재 개발하고 있는 게임에서 3개의 int형 변수 A, B, C를 각각의 A_handler, B_handler, C_handler에서
A는 0.1, B는 0.12, C는 0.15초마다 1씩 증가시켜 100이 되면 서로다른 특정 이벤트가 발생하고
다시 0으로 초기화 되는 일을 반복적으로 수행되게끔 하였습니다.
private Handler A_handler = new Handler() {
@Override
public void handleMessage(Message msg) {
++A;
if(A < 100) A_handler.postDelayed(A_Runnable, (long)0.1);
else {
A_handler.removeCallbacks(A_Runnable);
// 여기서는 A만의 특정 코드구현
}
}
};
private Runnable A_Runnable = new Runnable() {
@Override
public void run() {
A_handler.sendEmptyMessage(0);
}
};
private Handler B_handler = new Handler() {
@Override
public void handleMessage(Message msg) {
++B;
if(B < 100) B_handler.postDelayed(B_Runnable, (long)0.12);
else {
B_handler.removeCallbacks(B_Runnable);
// 여기서는 B만의 특정 코드구현
}
}
};
private Runnable B_Runnable = new Runnable() {
@Override
public void run() {
B_handler.sendEmptyMessage(0);
}
};
private Handler C_handler = new Handler() {
@Override
public void handleMessage(Message msg) {
++C;
if(C < 100) C_handler.postDelayed(C_Runnable, (long)0.15);
else {
C_handler.removeCallbacks(C_Runnable);
// 여기서는 C만의 특정 코드구현
}
}
};
private Runnable C_Runnable = new Runnable() {
@Override
public void run() {
C_handler.sendEmptyMessage(0);
}
};핸들러들은 모두 위에 코드식으로 구현되어 있습니다. 여기서 질문이 있습니다.
1 ) 3개의 hadler를 좀더 효율적으로 관리할 수 있는 방법은 없는 건지 알고싶습니다. 물론 세부적으로 정확히 하는 일은
틀리지만 기본적인 틀은 비슷하기에 혹시 간단히 합칠수 있는 방법을 알고싶습니다.
2 ) 지금 hadler가 구현되어 있는 클래스는 surfaceview를 상속받고 callback을 implements한 클래스 입니다. 여기서 handler를
생성할 때 new Handler()는 main쓰레드에서 동작이 되어진다고 알고있습니다. 혹시 이렇게 되면 게임의 속도 저하에 영향을 끼치는지
알고싶습니다. 만약 영향을 끼친다면 이 핸들러들을 main이 아닌 다른 Thread로 동작하게끔 하는 방법을 알고싶습니다.
두가지 질문 다 어떤 답변이든지 어떠한 예제링크이건 상관없습니다. 부디 도와주세요~!!




메인 스레드에서 생성되었으면,
handleMessage() 함수는 메인 스레드에서 동작합니다.
다른 스레드에서 동작하게 만들려면, 다른 스레드에서 핸들러를 생성하여 쓰면 됩니다.