好的,我有一个关于处理程序的问题。
场景:处理程序mHandler,Runnable mRunnable,int mState。
根据mState,mRunnable应该是某种东西。
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 :(得分:0)
secondCase();
将被执行。
(事实上,可能将mState声明为volatile是有意义的。)
执行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;
}
}
};