如何修改此示例代码以显示在BlackBerry中更新UI的三种方法之间的差异

Luc*_*cas 7 java multithreading blackberry

我正在试图理解管理UI交互的三种方法之间的差异.

在真实案例中试图弄清楚时,我真的很困惑这三个术语.

下面的代码显示了invokeAndWait方法的功能,但如果我用invokeLater或getEventLock()替换它,程序将以完全相同的方式工作.

有人可以修改代码,以显示更新UI的三种方法之间的差异吗?

public final class HelloWorldMainScreen extends MainScreen
{
    private LabelField labelField;
    public HelloWorldMainScreen()
    {        
        labelField = new LabelField("Hello World");       
        add(labelField);
        MainScreenUpdaterThread thread = new MainScreenUpdaterThread(this);
        thread.start();
    }

    public void appendLabelText(String text){
        labelField.setText(labelField.getText()+"\n"+text);
    }
}

public class MainScreenUpdaterThread extends Thread {
    HelloWorldMainScreen mainScreen;

    public MainScreenUpdaterThread(HelloWorldMainScreen mainScreen){
        this.mainScreen = mainScreen;
    }

    public void run(){
        for (int i = 0; i < 10; i++) {
            try{
                Thread.sleep(5000);
            }catch(InterruptedException ex){};
            UiApplication.getUiApplication().invokeAndWait(new Runnable() {

                public void run() {
                    mainScreen.appendLabelText("Update");                   
                }
            });
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

对于许多初学者来说,这三个概念非常混乱,因此任何描述其功能的解释性源代码都会对任何人都有很大帮助.

提前致谢!

Eug*_*nov 6

我对三种不同方法的理解:

  • Application.getEventLock() - 尽快获得事件锁定
  • UiApplication.invokeLater()- 放入Runnable事件队列,它将在之前放入此队列的所有其他任务之后执行
  • UiApplication.invokeAndWait()- 与前一个相同,但调用线程将停止,直到Runnable运行

我的个人意见从不使用第一种方法.我不认为我的任何绘图或UI更改任务更优先考虑其他任务已经放入事件队列.

我主要使用第二种方法,当我实现一些模态弹出对话框选择时,我使用了最后一种方法.