好吧,我有一个关于处理程序的问题。
场景:处理程序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()
我知道您可以自己回答,
但我提出这个问题的真正意图是了解这种行为的原因。
谢谢你们 :)
最佳答案
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;
}
}
};