gpt4 book ai didi

java - 取消后延迟处理程序/可运行的暂停/等待,并仍然激活暂停的代码

转载 作者:行者123 更新时间:2023-12-01 05:44:14 24 4
gpt4 key购买 nike

设置:我有一个 4 阶段 Activity ,我使用 postdelayed 处理程序通过另外两个嵌套 postdelay 来暂停。

时间表:

第一阶段 |代码火灾| stage2 |代码火灾| stage3 |代码火灾|阶段4

stage1:已停用,仅显示自定义警报对话框

阶段2:停用(大部分)为用户提供视觉效果,包括倒计时器

阶段3:通过第二个倒计时器停用

第四阶段:用户交互,没有倒计时或额外的暂停

我希望用户能够通过按下按钮跳到 stage2 的末尾,这将取消倒计时计时器和后延迟(而不取消它正在等待启动的代码)

我尝试单独取消两者,但没有成功,以下是我使用过的命令。

    countdowntimer.cancel();  // this didn't work from the button or a void call
handler.removeCallbacks(runnable); // want to skip to end of stage2

我看到了一些对 try/catch 的引用,或者可能在搜索中使用线程,但不确定如何使用或是否合适。

感谢您的任何意见。

**编辑非工作代码引用:*我删除了大部分不相关的内容,不确定是否删除了任何 } 或 ;额外

    public class Main extends Activity {

public Boolean onOffCDT = true;
public Handler handler2Mem;
public Runnable mem2Runnable = null;
public CountDownTimer aCounter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

aCounter = null;
final Handler handlerMem = new Handler();
final Runnable memRunnable = new Runnable() {

public void run() {
//code
final CountDownTimer aCounter = new CountDownTimer(memTime, 100) {

public void onTick(long millisUntilFinished) {
//update time
if(onOffCDT.equals(false)) {
onOffCDT = true;
// aCounter.cancel();
}
}

public void onFinish() {
title.setText(tempTitle);
}
};
aCounter.start();


Handler handler2Mem = new Handler();
Runnable mem2Runnable = new Runnable() {
public void run() {
//code
CountDownTimer bCounter = new CountDownTimer(8000, 100) {

public void onTick(long millisUntilFinished) {
//update time
}

public void onFinish() {
title.setText(tempTitle);
}
};
bCounter.start();
stage3(8000); //another delay
};
}; handler2Mem.postDelayed(mem2Runnable, memTime);


}

}; handlerMem.postDelayed(memRunnable, 2500);

submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// this button checks stage#, if stage4 info - else...
}else{
aCounter.cancel();
onOffCDT = false;
cancelCountDown(mem2Runnable, handler2Mem);
}
}

});

}

private void stage3 (Integer tTime) {
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
//Do Stuff

}
}, tTime);
}

public void cancelCountDown(Runnable run2, Handler hand2) {

hand2.removeCallbacks(run2);

}

最佳答案

只需在您的方法中添加一个 if ((boolean)canceled)return 并在您想要取消时将其设置为 true

关于java - 取消后延迟处理程序/可运行的暂停/等待,并仍然激活暂停的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6318612/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com