此代码包含在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
答案 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
}