2013-02-18 20 views
11

Programımda bir yükleme ekranı olması için bu eğiticiyi takip ediyorum. Eğitici, Sleep() işlevinin Sleep() işlevinin Sleep() komutunu kullanması gerektiğini, ancak Sleep() işlevini bir işlev olarak algılamayacağını ve bir hatayla birlikte Sleep() adlı bir yöntem oluşturmak isteyip istemediğimi sorduğumu söylüyor.Uyku() in java (Android)

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

İşte kod örnektir:

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

'Sleep()' ı Handler ile birleştirmeye çalışıyorsunuz, bu gereksiz çünkü 'postDelay()' zaten bir gecikme sunacak. Daha uzun bir gecikme istiyorsanız, "WAIT_TIME" değerini artırın. – Sam

+2

Dikkat çekmeye değer gibi hissediyorum, bir yükleme ekranı kullanmak iyi bir fikir değil, sadece bunu yapmak için. Bir öğreticiyi takip ettiğinizi anlıyorum ve bu iyi.Ancak, kullanıcılar için bir şeyler yapma noktasına geldiğinizde, lütfen kesinlikle gerekli olandan daha fazla süre bekletmeyin. Yüklenecek verileriniz varsa, bunu yapın ve yükleme sırasında bir sıçrama gösterin, ancak keyfi bir bekleme süresini kodlamayın. Sadece zamanlarını harcıyor olacaksın. – FoamyGuy

cevap

31

Sen folllowing yöntemlerden birini kullanabilirsiniz:

Thread.sleep(timeInMills); 

veya

SystemClock.sleep(timeInMills); 

SystemClock.sleep(milliseconds)Thread.sleep(milliseconds) çok benzer bir yardımcı işlev, ama InterruptedException yok sayar. İş parçacığının kesintili durumunu koruyacağından, Thread.interrupt() kullanmıyorsanız gecikmeler için bu işlevi kullanın.

6

fonksiyon Thread.sleep(long) İşte

öğretici bir bağlantıdır.

Ancak, UI iş parçacığında bir uyku gerçekleştirmemelisiniz.

4

Gönderdiğiniz kod korkunç. Lütfen bunu gerçek bir cihazda kullanmayın. Buna benzer bir şey çalıştırırsanız, "Uygulama Yanıt Vermiyor" hatası alırsınız.

İşleyicileri kullanıyorsanız,'un çalıştığı iş parçacığına bir İşleyici'nin oluşturulduğunu unutmayın. Bu nedenle, UI iş parçacığı üzerinde new Handler().post(... numaralı çağrı, bu "uzun çalışma işlemi" de dahil olmak üzere UI iş parçacığı üzerinde çalıştırılabilir çalıştırılacak. Avantajı, aşağıda gösterildiği gibi daha sonra kullanabileceğiniz UI Thread'e bir İşleyici yaratabilmenizdir.

Uzun koşu işlemini arka plan iş parçacığına yerleştirmek için, aşağıda gösterildiği gibi, runnable etrafında bir Thread oluşturmanız gerekir. Şimdi, uzun çalışma işlemi tamamlandıktan sonra kullanıcı arayüzünü güncellemek isterseniz, bunu bir İşleyici kullanarak kullanıcı arayüzüne göndermeniz gerekir.

Bu işlevin, AsyncTask için mükemmel bir uyum olduğunu unutmayın; bu, aşağıdaki şablondan çok daha temiz görünmesini sağlar. Ancak Handlers, Threads ve Runnables'ın nasıl ilişkilendiğini göstermek için bunu ekledim.

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

thread.sleep (1000);

1000, programın duraklayacağı milisaniye sayısıdır.

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

Unutmayın: Bu kodu kullanarak tavsiye edilmez, bu kontrolün zaman ama olmayan bir gecikme olabilir ve daha fazla veya daha az zaman gerekebilir çünkü.