Как сделать паузу / задержку на Android?

1

В настоящее время я изучаю, как разрабатывать приложения для мобильных устройств Android.

Я написал тестовое приложение для отображения чисел 0-9 на экране устройства. Я создал простую функцию для задержки изменения числа.

Однако при запуске приложения отображается только окончательный номер. Существует также задержка до этого последнего номера. Я предполагаю, что длина паузы - это моя определенная задержка, умноженная на количество цифр, которые будут показаны.

Как создать приложение, которое изменяет числа с задержкой?

public class AndroidProjectActivity extends Activity {
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        Main();
    }

void Delay(int Seconds){
    long Time = 0;
    Time = System.currentTimeMillis();
    while(System.currentTimeMillis() < Time+(Seconds*1000));
}

void Main() {
    String ConvertedInt;
    TextView tv = new TextView(this);
    setContentView(tv);

    for(int NewInt = 0; NewInt!= 9; NewInt++){
        ConvertedInt = Character.toString((char)(NewInt+48));
        tv.setText(ConvertedInt);
        Delay(5);
    }
}
  • 0
    Вы эмулируете это или работаете на реальном оборудовании?
  • 0
    Я использую эмулятор Android AVD.
Показать ещё 7 комментариев
Теги:

3 ответа

1
Лучший ответ

Один из способов сделать это - создать runnable, который обновит ваше представление. Это будет по-прежнему обновляться в потоке пользовательского интерфейса, но ждать в фоновом режиме. Возможно, в приведенном ниже коде могут быть ошибки, но они должны работать с небольшими изменениями.

Блокирование любого из системных вызовов в вашей деятельности не очень хорошо, поскольку вы блокируете поток пользовательского интерфейса. Ваше приложение будет принудительно закрыто с сообщением "Не реагировать на приложение". Вот еще один хороший пример.

public class AndroidProjectActivity extends Activity {
    private Handler mHandler;
    private TextView mTextView;
    private Runnable mCountUpdater = new Runnable() {
        private int mCount = 0;
        run() {
           if(mCount > 9)
               return;
           mTextView.setText(String.valueOF(mCount+48));
           mCount++;
           // Reschedule ourselves.
           mHandler.postDelayed(this, 5000);
        }
    }
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        // Cleaner to load a view from a layout..
        TextView tv = new TextView(this);
        setContentView(tv);
        mTextView = tv;
        // Create handler on UI thread.
        mHandler = new Handler();
        mHandler.post(mCountUpdater);
    }
}
1

Попробуйте создать thread, which sleeps for certain interval of time, а затем увеличивайте значение на 1 до 9. И используйте Handler to update the UI.

Вы также можете использовать AsyncTask

0

Вызов main() я блокирует пользовательский интерфейс, чтобы он не мог отображать числа до тех пор, пока вызов не будет завершен.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню