0

アプリケーションが起動した直後にバージョンヒットチェックがあります。しかし、シミュレーターがリクエストの送信などをロードしているとき。アプリケーションの起動後、バージョンヒット値はNULLになりますが、アプリケーションを閉じて再度開くと、正しい値が得られます。

1)私の質問は、なぜこの動作が発生するのか、そしてそのアプリが起動してバージョンチェックが最初の試行で正しい値を与えるようにするにはどうすればよいかということです!

2)そして、アプリはユーザーによって実行されないのに、なぜそのコード行が実行されるのですか?????

public MyScreen()  { 
    Bitmap bitmap = Bitmap.getBitmapResource("background.png");
    this.getMainManager().setBackground(
            BackgroundFactory.createBitmapBackground(bitmap)); 

    synchronized (Application.getEventLock()) 
    {
        UiApplication.getUiApplication().invokeLater(new Runnable() 
        {
            public void run() 
            {
                Status.show("Please Wait...", Bitmap.getPredefinedBitmap(Bitmap.INFORMATION), 1000);
                LoginScreen();
            }
        }); 
    }

これで、バックグラウンド画面のみが表示され、サービスは何も発生しませんが、再度起動すると機能します。どうしたの?ありがとう

4

1 に答える 1

0

MyScreenクラスが実際に一種の(継承による)場合Screen、この場合、イベントロックで同期する必要はありません。aのコンストラクターScreenはUIスレッドで既に呼び出されているため、コードを次のように単純化してください。

public MyScreen()  { 
    Bitmap bitmap = Bitmap.getBitmapResource("background.png");
    this.getMainManager().setBackground(
            BackgroundFactory.createBitmapBackground(bitmap)); 

    UiApplication.getUiApplication().invokeLater(new Runnable() 
    {
        public void run() 
        {
            Status.show("Please Wait...", Bitmap.getPredefinedBitmap(Bitmap.INFORMATION), 1000);
            LoginScreen();
        }
    }); 

また、あなたも電話を取り除くことができるかもしれませんinvokeLater()、これであなたを残します:

public MyScreen()  { 
    Bitmap bitmap = Bitmap.getBitmapResource("background.png");
    this.getMainManager().setBackground(
            BackgroundFactory.createBitmapBackground(bitmap)); 

    Status.show("Please Wait...", Bitmap.getPredefinedBitmap(Bitmap.INFORMATION), 1000);
    LoginScreen();

通常はinvokeLater()、メソッド内のコードをrun()バックグラウンドスレッドから安全に開始したい場合、またはコンストラクターの終了に実行されるようにキューに入れたい場合に使用します。

しかし、それがすぐに起こる準備ができていて、その呼び出しを使用して、

 Status.show("Please Wait...", Bitmap.getPredefinedBitmap(Bitmap.INFORMATION), 1000);
 LoginScreen();

がUIスレッドで実行された場合は、その必要はありません。前述したように、MyScreenコンストラクターのUIスレッドを既に使用しているためです。

MyScreenただし、コンストラクターの最後で何をしているのかもわからないので、使用するのinvokeLater()が適切である可能性があります。

上記の私のコメントに応えて、さらにいくつかの情報を投稿してください。私はもっと助けようとします。

于 2013-01-26T10:00:01.637 に答える