私は このチュートリアル に従ってプログラムに読み込み画面を表示しています。チュートリアルでは、アクティビティは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);
}
}
次のいずれかの方法を使用できます。
_Thread.sleep(timeInMills);
_
または
_SystemClock.sleep(timeInMills);
_
SystemClock.sleep(milliseconds)
はThread.sleep(milliseconds)
と非常によく似たユーティリティ関数ですが、InterruptedException
を無視します。 Thread.interrupt()
を使用しない場合は、スレッドの割り込み状態を保持するため、この関数を遅延に使用します。
関数は Thread.sleep(long)
です。
ただし、UIスレッドでスリープを実行しないでください。
あなたが投稿したコードは恐ろしいです。実際のデバイスでは使用しないでください。これに類似した何かを実行すると、「アプリケーションが応答していません」というエラーが表示されます。
ハンドラーを使用している場合は、ハンドラーが作成されることに注意してください実行するスレッド上。したがって、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();
}
thread.sleep(1000)を使用します。
1000は、プログラムが一時停止するミリ秒数です。
try
{
Thread.sleep(1000);
}
catch(InterruptedException ex)
{
Thread.currentThread().interrupt();
}
覚えておいてください:このコードの使用はお勧めしません。時間の遅延ですが、制御ができず、多少の時間が必要になる場合があるためです。