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

Имейте в виду: использование этого кода не рекомендуется, поскольку это задержка времени, но без контроля и может потребоваться больше или меньше времени.