1

Blackberry の invokeLater メソッド内に次のようなスレッドがあります。

startButton.setChangeListener(new FieldChangeListener() {
public void fieldChanged(Field arg0, int arg1) {
    UiApplication.getUiApplication().invokeLater(new Runnable() {
        public void run() {
            Thread thread = new Thread(){
                public void run() {
                    uploadFile();
                }
            };
            thread.start();
        }
    });
}

その関数をバックグラウンドで実行し、その仕事をしている間に他のことをできるようにしたいので、スレッドがあります。私が疑問に思っているのは、これが良いアプローチであるかどうかです。この場合、invokeLater は本当に必要ですか?

4

1 に答える 1

2

短い答え:いいえ。

長い答え:

InvokeLater は Runnable をイベント キューに置くので、やがてイベント ループが Runnable を検出すると、それがイベント スレッドで実行されます。FieldChangeListener の fieldChanged メソッドで invokeLater を呼び出しているため、イベント スレッドから呼び出しています。やりたいことが、スレッドの開始を後で未知の時間に遅らせることでない限り、invokeLater を使用する必要はありません。

于 2012-10-18T17:02:43.417 に答える