2013-02-18 29 views
11

Tôi đang làm theo hướng dẫn này để có màn hình tải trong chương trình của tôi. Hướng dẫn nói hoạt động của tôi nên Sleep() sử dụng lệnh Sleep(), tuy nhiên nó không nhận ra Sleep() như một hàm và cung cấp cho tôi một lỗi, hỏi xem tôi có muốn tạo một phương thức gọi là Sleep() hay không.Sleep() trong java (Android)

Dưới đây là một liên kết đến các hướng dẫn:

http://androidcookbook.com/Recipe.seam;jsessionid=4DBCC1688B51DB16A2A40A86E135D361?recipeId=1599

Đây là mẫu mã:

public class LoadingScreenActivity extends Activity { 

    //Introduce an delay 
    private final int WAIT_TIME = 2500; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     System.out.println("LoadingScreenActivity screen started"); 

     setContentView(R.layout.loading_screen); 
     findViewById(R.id.mainSpinner1).setVisibility(View.VISIBLE); 

     new Handler().postDelayed(new Runnable(){ 

      @Override 
      public void run() { 

       //Simulating a long running task 
       this.Sleep(1000); 
       System.out.println("Going to Profile Data"); 

       /* Create an Intent that will start the ProfileData-Activity. */ 
       Intent mainIntent = new Intent(LoadingScreenActivity.this,ProfileData.class); 
       LoadingScreenActivity.this.startActivity(mainIntent); 
       LoadingScreenActivity.this.finish(); 
      } 
     }, WAIT_TIME); 
    } 
} 
+6

Thread.sleep (1000); –

+2

Bạn đang cố gắng kết hợp 'sleep()' với Handler, điều này là không cần thiết vì 'postDelay()' sẽ giới thiệu một sự chậm trễ. Nếu bạn muốn trì hoãn lâu hơn, hãy tăng 'WAIT_TIME'. – Sam

+2

Tôi cảm thấy như nó là giá trị chỉ ra, rằng nó không phải là một ý tưởng tốt để sử dụng một màn hình tải, chỉ vì lợi ích của việc làm như vậy. Tôi hiểu rằng bạn đang theo dõi một hướng dẫn, và điều đó là tốt.Nhưng một khi bạn nhận được để xây dựng một cái gì đó cho người dùng, xin vui lòng không làm cho họ chờ đợi bất kỳ số lượng thời gian nhiều hơn là hoàn toàn cần thiết. Nếu bạn có dữ liệu để tải, hãy làm điều đó và hiển thị một giật gân trong khi đang tải, nhưng không mã hóa thời gian chờ tùy ý. Bạn sẽ chỉ lãng phí thời gian của họ. – FoamyGuy

Trả lời

31

Bạn có thể sử dụng một trong các phương pháp folllowing:

Thread.sleep(timeInMills); 

hoặc

SystemClock.sleep(timeInMills); 

SystemClock.sleep(milliseconds) là một chức năng tiện ích rất giống với Thread.sleep(milliseconds), nhưng nó bỏ qua InterruptedException. Sử dụng chức năng này cho sự chậm trễ nếu bạn không sử dụng Thread.interrupt(), vì nó sẽ bảo toàn trạng thái ngắt của luồng.

6

Chức năng là Thread.sleep(long).

Lưu ý, tuy nhiên, bạn không nên thực hiện chế độ ngủ trên chuỗi giao diện người dùng.

4

Mã bạn đăng là khủng khiếp. Vui lòng không sử dụng trên thiết bị thực tế. Bạn sẽ nhận được lỗi "Ứng dụng không phản hồi" nếu bạn chạy một cái gì đó tương tự như thế này.

Nếu bạn đang sử dụng Trình xử lý, hãy nhớ rằng Trình xử lý được tạo trên chuỗi nơi nó chạy. Vì vậy, gọi số new Handler().post(... trên chuỗi giao diện người dùng sẽ thực thi runnable trên chuỗi giao diện người dùng, bao gồm "hoạt động chạy dài" này. Ưu điểm là bạn có thể tạo một Trình xử lý cho Chủ đề giao diện người dùng mà bạn có thể sử dụng sau, như được hiển thị bên dưới.

Để đặt hoạt động chạy dài vào một chuỗi nền, bạn cần tạo một Chuỗi quanh runnable, như được hiển thị bên dưới. Bây giờ nếu bạn muốn cập nhật giao diện người dùng khi thao tác chạy dài đã hoàn tất, bạn cần phải đăng lên giao diện người dùng bằng cách sử dụng Trình xử lý.

Lưu ý rằng chức năng này phù hợp hoàn hảo cho một AsyncTask, điều này sẽ làm cho chế độ này trông sạch hơn nhiều so với mẫu bên dưới. Tuy nhiên, tôi bao gồm điều này để hiển thị cách xử lý, Chủ đề và Runnables liên quan.

public class LoadingScreenActivity extends Activity { 

//Introduce a delay 
    private final int WAIT_TIME = 2500; 
    private Handler uiHandler; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     uiHandler = new Handler(); // anything posted to this handler will run on the UI Thread 
     System.out.println("LoadingScreenActivity screen started"); 
     setContentView(R.layout.loading_screen); 
     findViewById(R.id.mainSpinner1).setVisibility(View.VISIBLE); 

     Runnable onUi = new Runnable() { 
      @Override 
      public void run() { 
       // this will run on the main UI thread 
       Intent mainIntent = new Intent(LoadingScreenActivity.this,ProfileData.class); 
       LoadingScreenActivity.this.startActivity(mainIntent); 
       LoadingScreenActivity.this.finish(); 
      } 
     }; 

     Runnable background = new Runnable() { 
      @Override 
      public void run() { 
       // This is the delay 
       Thread.Sleep(WAIT_TIME); 
       // This will run on a background thread 
       //Simulating a long running task 
       Thread.Sleep(1000); 
       System.out.println("Going to Profile Data"); 
       uiHandler.post(onUi); 
      } 
     }; 

     new Thread(background).start(); 
} 
1

sử dụng Thread.sleep (1000);

1000 là số mili giây chương trình sẽ tạm dừng.

try   
{ 
    Thread.sleep(1000); 
} 
catch(InterruptedException ex) 
{ 
    Thread.currentThread().interrupt(); 
} 

Lưu ý: Việc sử dụng mã này không được khuyến nghị vì đó là thời gian trễ nhưng không kiểm soát và có thể cần nhiều thời gian hơn hoặc ít hơn.

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