1

我正在尝试启动启动画面几秒钟,然后将其关闭并启动第二个屏幕。

出于某种原因,代码在显示启动页面之前执行“睡眠”,启动页面仅出现几分之一秒,第二个屏幕立即出现。换句话说,当我单击应用程序图标时,它会等待 2 秒钟,然后显示并立即隐藏启动画面并跳转到 HomeScreen。

我尝试了许多不同的组合,包括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 回答