안드로이드 개발 질문/답변
(글 수 45,052)
Game/Music Application에서 구현하기 위한 timer를 구현해보고 있습니다.
쉽게 말하면 드럼머신 같은 건데요.
1ms 단위로 정확히 타이머가 작동하면 됩니다.
총 세가지 방법을 시도해보았으나 만족스럽지 않습니다.
1. Timer, TimerTask를 사용한 방법
TimerTask myTask = new TimerTask() {
public void run() {
Log.d("myTask", "run()");
}
};
Timer timer = new Timer();
//timer.schedule(myTask, 5000); // 5초후 실행하고 종료
timer.schedule(myTask, 5000, 3000); // 5초후 첫실행, 3초마다 계속실행
2. CountDownTimer를 이용한 방법
new CountDownTimer( 100, 100 ){
@Override
public void onFinish() {
imgLamp.setImageResource(R.drawable.lamp);
}
@Override
public void onTick(long millisUntilFinished) {
// TODO Auto-generated method stub
}
}.start();
3. handler를 이용한 방법
http://www.androidpub.com/4374
Handler mHandler = new Handler();
mHandler.postDelayed(new Runnable() {
//Do Something
}, 3000);
위 세가지 방법 모두 정확한 간격으로 타이머가 울리지 않습니다.
간격 테스트는 mp3파일 작은 것 하나를 타이머발생시 울리도록 하였습니다.
혹시...
Windows PC 또는 iPhone 급의 1ms 단위의 타이머 발생을 어떻게 하는 지
아시는 분이 계실지요?
감사합니다. ^^
쉽게 말하면 드럼머신 같은 건데요.
1ms 단위로 정확히 타이머가 작동하면 됩니다.
총 세가지 방법을 시도해보았으나 만족스럽지 않습니다.
1. Timer, TimerTask를 사용한 방법
TimerTask myTask = new TimerTask() {
public void run() {
Log.d("myTask", "run()");
}
};
Timer timer = new Timer();
//timer.schedule(myTask, 5000); // 5초후 실행하고 종료
timer.schedule(myTask, 5000, 3000); // 5초후 첫실행, 3초마다 계속실행
2. CountDownTimer를 이용한 방법
new CountDownTimer( 100, 100 ){
@Override
public void onFinish() {
imgLamp.setImageResource(R.
}
@Override
public void onTick(long millisUntilFinished) {
// TODO Auto-generated method stub
}
}.start();
3. handler를 이용한 방법
http://www.androidpub.com/4374
Handler mHandler = new Handler();
mHandler.postDelayed(new Runnable() {
//Do Something
}, 3000);
위 세가지 방법 모두 정확한 간격으로 타이머가 울리지 않습니다.
간격 테스트는 mp3파일 작은 것 하나를 타이머발생시 울리도록 하였습니다.
혹시...
Windows PC 또는 iPhone 급의 1ms 단위의 타이머 발생을 어떻게 하는 지
아시는 분이 계실지요?
감사합니다. ^^
그러니 시스템 시간을 가져와서 사용을 하더라도 각 PC마다 CPU클럭의 차이로 인해 처음에는 비슷하다 나중에는 달라지게 되죠..
그래서 API를 봐도 타임머를 설정할 때 약 1초라고 되어 있지 1초라고 명시 되어 있지는 않죠..
그래서 정확한 시간이 필요한 서버급 컴퓨터에서는 시간동기화라는 프로그램을 사용합니다. 특정 서버와 시간을 동기화 시키는 것이죠..
위 사항은 CPU를 사용하는 모든 기기들이 마찬가지 일겁니다.. 그래서 핸드폰 시계도 따로 조정하는 것이 있는게 아니라 위성인가? 어딘가와 싱크를 맞춰서 동작하도록 되어 있죠..
이렇게 싱크를 맞추는 실제 사용되는 핸드폰에서 동작하면 정상적으로 동작할 것입니다..
만약이런게 아니라 그냥 시간이 않맞는것이라면 소스를 다시 살펴 보시는게 맞는 듯 합니다.. ^^