2013-11-21 28 views
1

好的,我有一個關於處理程序的問題。Android處理程序:postdelayed中的變量狀態

場景: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; 
      } 
     } 

}; 
相關問題