延迟工作正常;轻微修改,没有延迟 - 为什么?

时间:2015-07-18 16:24:48

标签: android runnable android-handler

此代码包含在QuizFragment.java中,延迟ms毫秒,然后执行loadNextFlag。工作良好。 (ms = 2000毫秒)

public void pauseAndThenShowNextFlag(long ms){
    showTimer("pauseAndThenShowNextFlag");
    pauseTimer(); // 7/17/15--DAS
    handler.postDelayed
            (
                    new Runnable() {
                        @Override
                        public void run() {
                            loadNextFlag();
                        }
                    }, ms       // ms-second delay
            );
    startTimer();
}

我将延迟更改为另一个对象,因此上面变为:

public void pauseAndThenShowNextFlag(long ms){
    showTimer("pauseAndThenShowNextFlag");
    Timer.xhaltTimer4(ms);
    loadNextFlag();
    startTimer();
}

xhaltTimer4中的Timer.java

public static void xhaltTimer4(long ms){
    customHandler.postDelayed
            (
                    new Runnable() {
                        @Override
                        public void run() {
                            pauseTimer();
                        }
                    }, ms); // 2000 milliseconds for 2-second delay
}

绝对不会发生延迟。是因为loadNextFlag包含的代码多于pauseTimer吗?为什么会有所作为?根据{{​​1}} Runnable方法必须采取多少措施来确定延迟线的位置?

我尝试了这个修订后的run - 仍然没有延迟:

xhaltTimer4

这是public static void xhaltTimer4(long ms){ Handler h = new Handler(); h.postDelayed ( new Runnable() { @Override public void run() { pauseTimer(); } }, ms); // ms-millisecond delay }

pauseTimer

这是public static void pauseTimer(){ timeSwapBuff += timeInMilliseconds; customHandler.removeCallbacks(updateTimerThread); }

loadNextFlag

1 个答案:

答案 0 :(得分:2)

这是因为 xhaltTimer4 是同步方法调用,它不会等待 ms 。在这里你发布了一个Runnable,它会在一段时间后运行。您应该尝试在此{/ p>之类的可运行方法loadNextFlag()内移动run()

public static void xhaltTimer4(long ms){
    Handler h = new Handler();
    h.postDelayed
            (
                    new Runnable() {
                        @Override
                        public void run() {
                            pauseTimer();
                            loadNextFlag()
                        }
                    }, ms); // ms-millisecond delay
}