2010-06-19 32 views
6

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!

+0

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

Trả lời

0

có thể lỗi không bị trì hoãn. (không biết không có mã) nhưng lý do có thể là: chuỗi tải xuống của bạn hiển thị một bố cục khác sau khi tải xuống và màn hình splash trở nên vô hình trong lớp trên cùng của bạn. Splashscreen nhận được tin nhắn của bạn sau khi trì hoãn, do đó bạn không nhìn thấy nó sau này.

Các vấn đề liên quan