Sleep() в java (Android)
Я следую этому руководству, чтобы иметь экран загрузки в моей программе. В учебном пособии говорится, что моя активность должна Sleep() с помощью команды Sleep(), но она не распознает функцию Sleep() как функцию и дает мне ошибку, спрашивая, хочу ли я создать метод Sleep().
Вот ссылка на учебник:
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);
}
}
Ответы
Ответ 1
Вы можете использовать один из следующих методов:
Thread.sleep(timeInMills);
или
SystemClock.sleep(timeInMills);
SystemClock.sleep(milliseconds)
- функция полезности, очень похожая на Thread.sleep(milliseconds)
, но игнорирует InterruptedException
. Используйте эту функцию для задержек, если вы не используете Thread.interrupt()
, так как она сохранит прерванное состояние потока.
Ответ 2
Функция Thread.sleep(long)
.
Обратите внимание, однако, что вы не должны выполнять спящий режим в потоке пользовательского интерфейса.
Ответ 3
Код, который вы опубликовали, ужасен. Не используйте это на реальном устройстве. Вы получите ошибку "Приложение не отвечает", если вы запустите что-то похожее на это.
Если вы используете обработчики, имейте в виду, что обработчик создается в потоке, где он выполняется. Поэтому вызов new Handler().post(...
в потоке пользовательского интерфейса будет выполнять runnable в потоке пользовательского интерфейса, включая эту "длительную операцию". Преимущество состоит в том, что вы можете создать обработчик для потока пользовательского интерфейса, который вы можете использовать позже, как показано ниже.
Чтобы запустить длинную операцию в фоновый поток, вам нужно создать поток вокруг runnable, как показано ниже. Теперь, если вы хотите обновить пользовательский интерфейс после завершения длительной операции, вам необходимо опубликовать его в потоке пользовательского интерфейса с помощью обработчика.
Обратите внимание, что эта функциональность идеально подходит для AsyncTask
, которая сделает это намного более чистым, чем шаблон ниже. Однако я включил это, чтобы показать, как связаны обработчики, потоки и 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();
}
Ответ 4
используйте Thread.sleep(1000);
1000 - это количество миллисекунд, которое программа приостанавливает.
try
{
Thread.sleep(1000);
}
catch(InterruptedException ex)
{
Thread.currentThread().interrupt();
}
Имейте в виду: использование этого кода не рекомендуется, поскольку это задержка времени, но без контроля и может потребоваться больше или меньше времени.