Codenameone 关于Codename One UITimer如何工作的澄清

Codenameone 关于Codename One UITimer如何工作的澄清,codenameone,Codenameone,我需要一个关于代码名OneUITimer的澄清 例如,如果我希望每两秒钟执行一次相同的代码,则类似于UITimer.timer(2000,true,()->{do something;})的代码一直工作,直到用户停留在当前的表单中?是这样吗 如果我想每两秒钟执行一次相同的代码而不考虑所显示的表单,我是否需要使用与UITimer不同的东西,比如自定义的独立线程?例如下面的代码 Form hi = new Form("Hi World", BoxLayout.y()); hi.add

我需要一个关于代码名One
UITimer
的澄清

例如,如果我希望每两秒钟执行一次相同的代码,则类似于
UITimer.timer(2000,true,()->{do something;})的代码一直工作,直到用户停留在当前的
表单中
?是这样吗

如果我想每两秒钟执行一次相同的代码而不考虑所显示的
表单
,我是否需要使用与
UITimer
不同的东西,比如自定义的独立线程?例如下面的代码

    Form hi = new Form("Hi World", BoxLayout.y());
    hi.add(new Label("Hi World"));
    hi.show();

    EasyThread.start("MyTimer").run(() -> {
        boolean executeMe = true;
        while (executeMe) {
            Log.p("Do something every two seconds...");
            try {
                Thread.sleep(2000);
            } catch (InterruptedException ex) {
                Log.p("Stopping the EasyThread \"MyTimer\" because an exception");
                Log.e(ex);
                executeMe = false;
            }
        }
    });
此外,如果执行此示例代码,则记录的第一行是:
[MyTimer]0:0:0,59-代号一修订版:8b451ecb7bfbe60baf91006441e7d7d9c46afe09

为什么该行由我的自定义线程而不是EDT记录?

是的,
UITimer
是与当前
表单相关联的动画。它不绘制任何东西,而是使用在EDT上运行的内置动画机制。请注意,如果您离开表单并返回表单,计时器将继续运行,例如:

  • 在0时间打开窗体,并设置计时器15秒
  • 在7秒时变成了另一种形式
  • 30秒后返回至原始状态-返回时计时器将立即启动
您还可以使用常规的
计时器
线程
。但是,对于您的特定代码,
EasyThread
与常规线程相比并没有什么好处,因为它在无限循环中运行。
EasyThread
的好处在于它的作业处理能力

请注意,在使用此类计时器/线程时,需要使用
callSerially
返回EDT