Handler.sendMessageDelayed(msg,delay)无法正常工作

6 multithreading android handler android-handler

我已经定义了一个在加载过程中显示的启动画面.但根据互联网连接,加载时间仅为600毫秒,有时甚至需要5000毫秒.所以我定义了启动画面至少显示了3000毫秒,这样用户就不会被浮雕屏幕激怒.

我通过以下方式定义启动画面的开始:

 private void splashScreen() {
        setContentView(R.layout.splashscreen);
        splash = (ImageView) findViewById(R.id.splashscreenLayer);
        startSplashTime = new Date();
        new LoadingThread().start(); 
    }
Run Code Online (Sandbox Code Playgroud)

在LoadingThread中,我检查网络并从Internet加载数据:

private class LoadingThread extends Thread {

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

    }
Run Code Online (Sandbox Code Playgroud)

加载完成后,我将消息发送到MainActivity中定义的处理程序:

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);
            splashHandler.sendMessageDelayed(msg, delay);
        } else {
            System.out.print("Show Splashscreen now");
            splashHandler.sendMessage(msg);
        }
    }
Run Code Online (Sandbox Code Playgroud)

RunningThreads上的一些代码行由runOnUIThread()调用.不幸的是,如果时间<SPLASH_MIN_TIME消息没有延迟但是立即发送.我认为使用sendMessageDelayed()时不应该这样.谁知道为什么?sysout显示正确计算延迟时间.谢谢!

小智 0

也许错误不在于延迟。(不知道没有更多代码)但可能的原因是:您的下载线程在下载后显示另一个布局,并且闪屏在您的顶层下变得不可见。启动画面会延迟收到您的消息,因此您稍后不会看到它。