Tôi đã xác định một màn hình splash được hiển thị trong khi tải. Nhưng tùy thuộc vào kết nối internet nó có thể chỉ mất 600ms để tải hoặc đôi khi 5000ms. Vì vậy, tôi xác định rằng các màn hình splash ít nhất được hiển thị 3000ms để người dùng không bị kích thích bởi màn hình flackering.Handler.sendMessageDelayed (msg, delay) không hoạt động chính xác
tôi xác định sự bắt đầu của Splashscreen theo cách sau:
private void splashScreen() {
setContentView(R.layout.splashscreen);
splash = (ImageView) findViewById(R.id.splashscreenLayer);
startSplashTime = new Date();
new LoadingThread().start();
}
Trong LoadingThread tôi kiểm tra mạng và tải dữ liệu từ Internet:
private class LoadingThread extends Thread {
@Override
public void run() {
checkNetwork();
}
}
Ngay sau khi tải xong, tôi gửi một tin nhắn đến trình xử lý của tôi được xác định trong 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);
}
}
Một số mã lin es trên LoadingThreads được gọi bởi runOnUIThread(). Thật không may, nếu thời gian < SPLASH_MIN_TIME tin nhắn không bị trì hoãn nhưng gửi ngay lập tức. Tôi nghĩ rằng với sendMessageDelayed() điều này không phải là trường hợp. Có ai biết tại sao không? Sysout cho thấy thời gian trễ được tính toán chính xác. Cảm ơn!
Bạn có thể thêm mã vào cách bạn khởi tạo Trình xử lý và mã bên trong lớp Trình xử lý của bạn không? – user697495