web-dev-qa-db-ja.com

Sleep()in Android Java

私は このチュートリアル に従ってプログラムに読み込み画面を表示しています。チュートリアルでは、アクティビティは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);
    }
}
20
spogebob92

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

_Thread.sleep(timeInMills);
_

または

_SystemClock.sleep(timeInMills);
_

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

48
Karan_Rana

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

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

6
MByD

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

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

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

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

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(); 
}
5
323go

thread.sleep(1000)を使用します。

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

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

覚えておいてください:このコードの使用はお勧めしません。時間の遅延ですが、制御ができず、多少の時間が必要になる場合があるためです。

1
Leon pvc