2009-06-19 12 views
2

私は、BlackberryアプリにGUIベースのシーケンシャルスタートアップコードを置く適切な場所を知りたいと思っています。Blackberry AppにGUIベースのスタートアップコードを入れる場所は?

In main(), I create MyApp and enterEventDispatcher() 
I have UiApplication (MyApp) 
In the MyApp CTOR: 
- I create a MainScreen (MyMain) 
- I call pushScreen() on MyMain 

イベントディスパッチャが起動したら、私が喜んで同期起動の作業を行うことができますイベントスレッドを与える私のMainScreenで私が聞くことができるイベントがありますか?

私はinvokeLater()を使用できますが、このフェーズではその順序が重要であるため、呼び出しをブロックする必要があります。 invokeAndWait()は、私がそれを使用しようとしたところで例外をスローします。

以下のコードを試しましたが、 "Testing 1 2 3"行で実行しようとすると例外が発生します。

 
    public class MyApp extends UiApplication { 

     static public void main(String[] args) { 
      new MyApp().enterEventDispatcher(); 
     } 

     public MyApp() 
     { 
      MyView theView = new MyView(); 
      theView.startUpdateTimer(); 
      pushScreen(theView); 

      Dialog.alert("Testing 1 2 3"); 
     } 
    } 

答えて

1

それはかなり速いUIのもの(画面を作成し、スタックにプッシュする)なら、enterEventDispatcherを呼び出す前にメインスレッドからそれを行うには。あなたが実際にあなたが望むだけのことをすることができます、あなたのアプリが長い時間がかかる場合、ユーザーエクスペリエンスは悪化します。

enterEventDispatcherを呼び出すスレッドは、基本的にイベントディスパッチスレッドになります。そのため、enterEventDispatcherを呼び出す前にそのスレッドでGUIの操作を行うのは安全です。

特に、主スレッドからinvokeAndWaitを呼び出さないでください。デッドロックが発生し、おそらく例外が発生します。

+0

enterEventDispatcherを呼び出す前にUI *が動作しますか?つまり、私はインタラクティブUIのことをすることはできますか たとえば、明確にするために、機能Xを有効にしたいかどうかをユーザーに尋ねたいとします。私はenterEventDispatcherを呼び出す前に、Dialog.ask()をmainで呼び出し、応答を取得し、自分の設定を調整することはできますか?それ以外の場合は、ディスパッチャの起動後に実行するようにキューに入れていると思います。 –

+0

私はDialog.alert()をmainで試しました。期待どおり、私はIllegalStateExceptionを取得します。アー。 invokeLaterにすべてのスタートアップコードをラップすることができると思いますが、それがRIMの方法であるかどうかを知りたいと思います。 –

関連する問題