Splashscreen有时只显示

时间:2010-07-26 19:54:11

标签: java android

我通过以下方式定义了一个启动画面:

/** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ExceptionHandler.register(this);
        setFullscreen();
        splashScreen();
    }

private void splashScreen() {

        runOnUiThread(new Runnable() {

            @Override
            public void run() {
                setContentView(R.layout.splashscreen);
                splash = (ImageView) findViewById(R.id.splashscreenLayer);
                startSplashTime = new Date();
            }
        });

        new LoadingThread().start(); 
    }

private class LoadingThread extends Thread {

        @Override
        public void run() {
            checkNetwork();
        }

    }

在checkNetwork()方法的特定条件下,调用stopSplash方法:

public void stopSplash() {
        Message msg = new Message();
        msg.what = STOPSPLASH;

        Date endSplashTime = new Date();
        long time = endSplashTime.getTime() - startSplashTime.getTime();
        System.out.println("Time Splashscreen was displayed: " + time);
        if (time < SPLASH_MIN_TIME) {
            long delay = SPLASH_MIN_TIME - time;
            System.out.println("Delay Splashscreen for: " + delay);
            try {
                Thread.sleep(delay);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            splashHandler.sendMessage(msg);
        } else {
            System.out.print("Show Splashscreen now");
            splashHandler.sendMessage(msg);
        }
    }
private Handler splashHandler = new Handler() {

        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case STOPSPLASH:
                    splash.setVisibility(View.GONE);
                break;
            }
            super.handleMessage(msg);
        }

    };

问题是,如果我直接从Eclipse启动应用程序,有时候(可能是10个中的1个),Splashscreen没有显示,而只是黑屏。

其他问题:如果我重新启动应用,例如单击设备上的后退按钮后调用onDestroy()后,几乎不会显示Splashscreen。

任何提示为什么?

我的假设:可能是,LoadingThread比Runnable“更快”启动,因此网络人员在Splashscreen设置之前完成了吗?

2 个答案:

答案 0 :(得分:0)

您可以尝试在实施中使用CountdownTimer。在你的第一个活动中,启动一个CountdownTimer,每隔一段时间检查onTick()以获得一个同步的boolean finishedLoading,并在onFinish()(15秒或者其他)中使用某种超时,而你的加载是在另一个设置finishedLoading的线程中完成的。完成时为真。

答案 1 :(得分:0)

在v =下一个活动开始之前,可能没有终止启动画面..只是一个想法..