6

ロード中に表示されるスプラッシュスクリーンを定義しました。ただし、インターネット接続によっては、読み込みに 600 ミリ秒しかかからないこともあれば、5000 ミリ秒かかることもあります。そのため、ユーザーが画面のちらつきにイライラしないように、スプラッシュスクリーンが少なくとも 3000 ミリ秒表示されるように定義しました。

スプラッシュスクリーンの開始を次のように定義します。

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

LoadingThread で、ネットワークをチェックし、インターネットからデータをロードします。

private class LoadingThread extends Thread {

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

    }

ロードが完了するとすぐに、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);
        }
    }

LoadingThreads の一部のコード行は、runOnUIThread() によって呼び出されます。残念ながら、時間 < SPLASH_MIN_TIME の場合、メッセージは遅延せず、即座に送信されます。sendMessageDelayed() では、これは当てはまらないと思います。理由を知っている人はいますか?sysout は、遅延時間が正しく計算されていることを示しています。ありがとう!

4

1 に答える 1