Android处理程序:postdelayed中的变量状态

时间:2013-11-21 08:43:33

标签: java android handler runnable postdelayed

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

场景:处理程序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()

我知道你可以自己回答一下,  但我提出这个问题的真实意图是要了解这种行为背后的原因。

谢谢大家:)

1 个答案:

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

};