1

スプラッシュ画面を数秒間起動してから閉じて、2 番目の画面を起動しようとしています。

何らかの理由で、コードはスプラッシュ ページを表示する前に「スリープ」を実行し、スプラッシュ ページが一瞬だけ表示され、2 番目の画面がすぐに表示されます。つまり、アプリのアイコンをクリックすると、2 秒間待機してからスプラッシュが表示され、すぐに非表示になり、ホームスクリーンにジャンプします。

invokeAndWait()Splash クラス内の 、コールバック、スレッドなど、さまざまな組み合わせを試しましたが、役に立ちませんでした。

SOに関する多くの投稿も行ってきました。

スプラッシュ ページで次の画面を開きたくないことに注意してください。スプラッシュ ページのランチャー ( AppStart) は、次の画面を起動する必要があります。

解決策を提案してください。

コード:

public class AppStart extends UiApplication 
{
    public static void main(String[] args) {
        AppStart app = new AppStart();
        app.enterEventDispatcher();
    }

    public AppStart() {
        final Splash splashscreen = new Splash();
        UiApplication.getUiApplication().invokeLater(new Runnable() {
            public void run() {
                UiApplication.getUiApplication().pushScreen(splashscreen); 
            }
        });
        Thread waitthread = new Thread()
        {
            public void run()
            {               
                try {
                    sleep(2000);
                } catch (InterruptedException e) {
                }
                finally
                {
                    UiApplication.getUiApplication().invokeLater(new Runnable() {
                        public void run() {
                            UiApplication.getUiApplication().popScreen(splashscreen); 
                        }
                    });
                    UiApplication.getUiApplication().invokeLater(new Runnable() {
                        public void run() {
                            UiApplication.getUiApplication().pushScreen(new HomeScreen()); 
                        }
                    });
                }
            }
        };  
        waitthread.run();
    }

}

スプラッシュ

public class Splash extends MainScreen {
    public Splash()
    {
        Bitmap bgImg = Bitmap.getBitmapResource("480x320-SplashScreen.png");
        Background bg = BackgroundFactory.createBitmapBackground(bgImg);
        getMainManager().setBackground(bg);
    }   
}
4

1 に答える 1

3
waitthread.run();

それが問題だ。新しいスレッドを開始するのではなく、メイン スレッドをスリープ状態にするメソッドを呼び出すことでメイン スレッドを占有します。その行を次の行に置き換えます。

waitthread.start();

そして、それはうまくいくはずです。

于 2013-09-20T08:38:38.013 に答える