3.4 UI模式下不能使用sleep
写好逻辑代码,要优化一下加上界面,发现在界面模式下直接调用函数时,如果有sleep延时语句,运行时会报错导致程序无法运行,会出现以下提示
Error: 不能在ui线程执行阻塞操作,请使用setTimeout代替
然而,使用setTimeout确实也无法解决问题。
解决方案:
使用新的线程执行,部分代码块如下。其中threads.start(main)中的main,是自定义的function man()函数
"ui";
var threadMain=null
ui.layout(
<vertical padding="16">
<button id="myThreadStart" text="启动程序" w="*" style="Widget.AppCompat.Button.Colored" />
<button id="myThreadStop" text="终止程序并退出" w="auto"/>
</vertical>
);
ui.myThreadStart.on("click", () => {
if(threadMain==null) {
threadMain = threads.start(main);
}else {
toast("程序已在运行,请点击停止");
}
});
ui.myThreadStop.on("click", () => {
if(threadMain==null) {
toast("没有程序在运行");
exit();
}else {
toast("程序线程已停止");
threadMain.interrupt();
threadMain = null;
exit();
}
});