2013-02-18 10 views
11

私はこのチュートリアルの後に私のプログラムに読み込み画面を表示しています。チュートリアルでは、Sleep()コマンドを使用してSleep()を実行する必要があると言いますが、Sleep()を関数として認識せず、Sleep()というメソッドを作成するかどうかを尋ねるエラーが表示されます。ここSleep()in java(Android)

チュートリアルへリンクされている:

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

ここでは、コードサンプルである:

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を組み合わせようとしていますが、 'postDelay()'はすでに遅延を導入しているのでこれは不要です。遅延を長くしたい場合は、 'WAIT_TIME'を増やしてください。 – Sam

+2

ロードスクリーンを使うのは良いことではないことを指摘しておきたいと思います。私はあなたがチュートリアルに従っていることを理解しており、それは問題ありません。しかし、いったんユーザーのために何かを構築するようになると、絶対に必要以上に時間を待たせないでください。ロードするデータがある場合は、ロードしながらスプラッシュを表示しますが、任意の待機時間をハードコードしないでください。あなたは時間を無駄にしています。 – FoamyGuy

答えて

31

あなたはfolllowingのいずれかの方法を使用することができます。

Thread.sleep(timeInMills); 

または

SystemClock.sleep(timeInMills); 

SystemClock.sleep(milliseconds)Thread.sleep(milliseconds)に非常によく似ユーティリティ関数ですが、それはInterruptedExceptionを無視します。 Thread.interrupt()を使用しない場合は、スレッドの中断状態を保持するため、この機能を遅延に使用します。

6

機能がThread.sleep(long)あります。

ただし、UIスレッドでスリープを実行しないでください。

4

あなたが投稿したコードは恐ろしいです。実際のデバイスでは使用しないでください。あなたはこれに似た何かを実行すると、 "アプリケーションが応答しません"というエラーが発生します。

ハンドラを使用している場合は、が実行されているスレッドにハンドラが作成されていることに注意してください。したがって、UIスレッドでnew Handler().post(...を呼び出すと、この「長時間実行される操作」を含むUIスレッドで実行可能ファイルが実行されます。利点は、以下に示すように、後で使用できるUIスレッドへのハンドラを作成できることです。

長時間実行する操作をバックグラウンドスレッドに入れるには、以下のように、実行可能領域の周りにスレッドを作成する必要があります。今度は、長時間実行された操作が完了したらUIを更新する場合は、ハンドラを使用してUIスレッドに通知する必要があります。

この機能は、AsyncTaskに最適です。この外観は、以下のパターンよりもきれいになります。しかし、Handler、Threads、Runnablesがどのように関連しているかを示すためにこれを含めました。

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

use Thread.sleep(1000);

1000は、プログラムが一時停止するミリ秒数です。

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

に注意してください:このコードを使用して、それは時間のが、制御なし遅延で、多かれ少なかれ時間を必要とする可能性があるため、推奨されません。