2013-11-21 3 views
1

좋아요, 처리기와 관련하여 질문이 있습니다.Android 처리기 : 지연된 변수의 상태

시나리오 : Handler mHandler, Runnable mRunnable, int mState.

mRunnable은 mState에 따라 뭔가가 있다고 가정합니다.

Runnable mRunnable = new Runnable() { 

@Override 
     public void run() { 

      switch (mState) { 
      case 1: 
          firstCase(); 

       break; 
      case 2: 
          secondCase(); 

       break; 

      default: 
       break; 
      } 
     } 

}; 

이제 mHandler.postDelayed (mRunnable, 3000) 명령을 실행합니다.

mState가 처음에 1이고 2.5 초 후에 2로 변경된다고 가정합니다.

내 질문은 : 어떤 기능이 실행됩니까? firstCase() 또는 secondCase()

당신이 직접 시도해 볼 수도 있습니다. 이 질문을하는 내 진정한 의도는이 동작의 원인에 대해 배우는 것입니다.

감사합니다 얘들 아 :)

+0

'secondCase()', mState''의 명확하게 가치 때문에 'run'이 실행될 때 2입니다. –

답변

0

secondCase();이 실행됩니다.

(사실, 휘발성으로 mState를 선언하는 의미가있을 수 있습니다.)

firstCase()을 실행 :

// in a method 
final int fState = mState; 
Runnable mRunnable = new Runnable() { 

@Override 
     public void run() { 

      switch (fState) { 
      case 1: 
          firstCase(); 

       break; 
      case 2: 
          secondCase(); 

       break; 

      default: 
       break; 
      } 
     } 

};