앞서 전체 코드가 있기 때문에 따로 뽑아서 설명해드리겠습니다.
--------------------------------------------------------------------------------------------------
게임에는 고정프레임과 가변프레임이 있습니다.
고정 프레임은 프레임을 고정시켜서 어떤 기기든지 개발자가 원하는 속도에 맞춰서 사용자가 플레이하게끔 만든것이고
가변프레임은 프레임을 가변시켜서 기기의 성능에 따라서 속도가 변하게 됩니다.
어찌보면 고정 프레임을 많이 쓸것 같은데 가변프레임은 언제 쓰시냐라고 하시는 분도 있을 겁니다.
가변프레임의 경우에는 pc게임에서 많이 씁니다. 저용량 저사양(?)느낌 아실겁니다.
------------------------------------------------------------------------------------------------
어찌됬건 이러한 프레임은 1초당 몇번 프레임이 움직이냐에 따른 주파수와 비슷하다고 보시면 됩니다
1초당 25번 전구의 불빛이 깜빡거리면 눈에서는 깜빠거림을 인지할 수 없는 걸 프로그래밍 한다고 보시면 됩니다.
----------------------------------------------------------------------------------------------------
(덧붙여서 설명드리면 MFC나 win32 api를 활용하시는 분들 또는 그외의 c나 c++을 쓰시는 분들은 위와 같은 현상을
인지하시고 코딩을 하시는데 유의하셔야 하며 그렇게 함에도 깜빡거림을 느낀다면 backbuffer의 부재 때문이란것을 아셔야합니다.
쉽게 설명하면 책에 낙서를 한장한장 애니메이션 효과를 주기위해 점프하는 것을 그립니다. 책을 촤르륵 열면 캐릭터가 점프하는 걸
보실 수 있습니다. 이러한 낙서장 옆에 새한마리가 날아다니는 걸 표현 합니다. 그리고 다시 책을 촤르륵 열면 캐릭터가 점프하면서
새가 날아다니는 걸 확인 할 수 있습니다. 
상황을 바꿔봅시다. 서로 다른 책에 캐릭터가 점프하는 것과 새가 날아디는 걸 그리고 책을 서로 겹쳐서 촤르륵 해봅시다. 이때 책장이
떨어지는 속도를 다륵 할 경우 뭔가 이상하다는 걸 볼 수 있습니다. 책이 서로 껴서 구겨지죠.. 이러한 이상함을 해결하기 위해서는 위와같이
한번에 그려야 합니다. 이게 backbuffer의 역할로 여러분이 그린걸 이곳에 저장한다음 한번에 화면에 뿌려야 애니메이션 효과를 이용 하 실수 있습니다)
----------------------------------------------------------------------------------------------------------------------
딴애기를 굉장히 많이 한 거 같습니다.

스레드로 돌아오죠.

스레드는 뭘까요?

밥을 먹고 간식을 먹고 후식을 먹는 이 과정이 
밥을 먹으면서 간식을 먹으면서도 후식을 먹는 과정이 되겠습니다.

이상해보이죠? 네 이상합니다.
한가지 일을 하면서 다른 일을 처리한다는게 쉬운일은 아니죠. 하지만, 여러 컴퓨터 과학자들이 이러한 일들을
만들어서 저희는 이걸 할 수 있게 되어 시간을 조금더 효율적으로 사용할 수 있습니다.

하지만 이러한 스레드는 문제점이 있습니다.
밥먹으면서 간식은 먹기 싫을때도 밥과 간식을 먹어야 하는 경우도 있고 밥먹다가 탈이 나서 다른 걸 
못먹을 경우도 있고 밥을 한톨먹고 간식 한톨먹고 후식 한톨을 먹어서 배가 찰 기미가 보이지 않을 경우도 있습니다.
이러한 스레드는 굉장히 사용하기 불편해 보이지만 !!
개발자로써는 숙명이므로 잘 사용하셔야 합니다.

또 서론이 길어졌네요.....

어쨋꺼나 저희는 이러한 스레드의 특징은 시간을 분할한다는 점에서 

Timer를 사용할 겁니다.
---------------------------------------------------------------------------------------------------------
private Handler handler = new Handler();
private Timer timer = new Timer();

<pre style="color: rgb(0, 0, 0); font-family: '굴림체'; font-size: 9pt; background-color: rgb(255, 255, 255);">timer.schedule(new TimerTask() {
@Override
public void run() {

handler.post(new Runnable() {

@Override
public void run() {</pre><pre style="color: rgb(0, 0, 0); font-family: '굴림체'; font-size: 9pt; background-color: rgb(255, 255, 255);">
</pre><pre style="color: rgb(0, 0, 0); font-family: '굴림체'; font-size: 9pt; background-color: rgb(255, 255, 255);">//~~~~~불라불라</pre><pre style="color: rgb(0, 0, 0); font-family: '굴림체'; font-size: 9pt; background-color: rgb(255, 255, 255);">
    });
}
}, 0, 20);

여기서 0, 20은 activity가 시작되고 0ms초후터 timer가 작동되면 20ms마다 위의 동작이 수행하게 됩니다. 
그래서 앞서 강좌에서 player가 움직일 수 있었던 겁니다.
</pre>