2013-11-21 2 views
1

Хорошо, у меня есть вопрос относительно обработчика.Обработчик Android: состояние переменных в postdelayed

Сценарий: Обработчик 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 через 2,5 секунды.

Мой вопрос: Какая функция будет выполнена? firstCase() или secondCase()

Я знаю, что вы можете ответить, попробуйте сами, , но мое истинное намерение задать этот вопрос - узнать о причине такого поведения.

Благодарности Ребята :)

+0

'secondCase()', потому что, очевидно, значение 'mState' 2, когда выполняется «run». –

ответ

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; 
      } 
     } 

}; 

 Смежные вопросы

  • Нет связанных вопросов^_^