28

このチュートリアルに従って、プログラムにロード画面を表示します。チュートリアルでは、アクティビティは Sleep() コマンドを使用して Sleep() する必要があると述べていますが、Sleep() を関数として認識せず、Sleep() というメソッドを作成するかどうかを尋ねるエラーが表示されます。

コードサンプルは次のとおりです。

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);
    }
}
4

4 に答える 4

61

次のいずれかの方法を使用できます。

Thread.sleep(timeInMills);

また

SystemClock.sleep(timeInMills);

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

于 2013-02-18T17:32:18.543 に答える
8

関数はThread.sleep(long)です。

ただし、UIスレッドでスリープを実行しないように注意してください。

于 2013-02-18T17:14:20.210 に答える
5

あなたが投稿したコードは恐ろしいです。実機では使用しないでください。これに似たものを実行すると、「Application Not Responding」エラーが発生します。

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

長時間実行される操作をバックグラウンド スレッドに入れるには、以下に示すように、ランナブルの周りにスレッドを作成する必要があります。長時間実行されている操作が完了したら UI を更新する場合は、ハンドラーを使用して UI スレッドに投稿する必要があります。

この機能は、AsyncTask以下のパターンよりもはるかにきれいに見える に完全に適合することに注意してください。ただし、ハンドラー、スレッド、およびランナブルがどのように関連しているかを示すために、これを含めました。

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(); 
}
于 2013-02-18T17:46:52.533 に答える