ロード中に表示されるスプラッシュスクリーンを定義しました。ただし、インターネット接続によっては、読み込みに 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 は、遅延時間が正しく計算されていることを示しています。ありがとう!