10

BlackBerry スレッド モデルが Java 標準から逸脱し、問題を引き起こす可能性があるというコメントをたくさん読んだことがありますが、これが正確に何を意味するのかについては、いくらグーグルで調べてもわかりませんでした。

私は BlackBerry 用のかなり大規模なビジネス アプリケーションを開発してきましたが、これまで Java マルチスレッド アプリケーションの経験はまったくありませんでしたが、スレッド化が原因と考えられる問題に遭遇したことはありません。私たちが自分自身を引き起こしたもの以外。

BlackBerry スレッド モデルの違いと、開発者としての私がそれをどのように考慮すべきかを正確に説明できる人はいますか? 明らかに、トピックに関するリンクも素晴らしいでしょう。

4

4 に答える 4

16

1.UI ユーザー インターフェイスの操作は、常にUI スレッドで実行する必要があります。LabelField.setText("foo");あなたがする必要があるようなそのような機能を実行するには:

UiApplication.getUiApplication().invokeLater(new Runnable(){
  public void run(){
    myLabelField.setText("foo");
    myLabelField.setDirty(true);
  }
});

簡単ですね。

2.ネットワーク ネットワーク操作は、UI スレッド内で実行しないでください。そのようなことを行うには、次のようにします。

new Thread(){
  public void run(){
    HttpConnection hc = 
            (HttpConnection)Connector.open("http://www.stackoverflow.com");
  }
}.start();

これらの 2 つの主な原則は非常に重要です。どのスレッドで操作しているかに常に注意する必要があります。

于 2009-04-30T16:11:49.503 に答える
2

ブラックベリー フォーラムで見つけた 2 つの癖:

  1. ベクトルはスレッドセーフではありません。
  2. ネイティブの blackberry CLDC アプリを作成している場合、静的は必ずしも VM 上のシングルトンではありません。
于 2009-03-23T02:46:09.727 に答える
1

違いはスレッディング モデルではなく、それらの使用方法であり、最初の投稿で述べたように、ネットワーク接続に ui スレッドを使用できないか、UI の更新にネットワーク接続を使用できません。

この問題には、デスクトップ Java とブラックベリー Java との間で多くの違いがあります...信じてください!

于 2011-04-02T16:47:21.880 に答える
0

私が考えることができる唯一の問題は、別のスタックオーバーフローの質問への回答で説明されています。

于 2008-12-12T20:15:35.713 に答える