好吧,我有一个关于处理程序的问题。

场景:处理程序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;
            }
        }

};

10-04 13:33