Как отложить выполнение кода на X количество времени в Android

При нажатии кнопки я хочу запустить таймер на 5 минут, а затем выполнить метод, который будет проверять определенные условия и отправлять предупреждения, если условия правильные. Я видел примеры с таймерами и postDelay, но не совсем понимаю, почему можно использовать один против другого. Каков наилучший способ выполнить то, что я пытаюсь сделать? Я не хочу блокировать пользовательский интерфейс в течение 5 минут. Пользователь должен иметь возможность использовать приложение как обычно во время обратного отсчета.

РЕДАКТИРОВАТЬ: я пробую предложение postDelayed, но Visual Studio что-то не нравится в моем коде. Это выглядит точно так же, как примеры, которые я нашел. Мое моно для андроида.

Handler h = new Handler();
Runnable r = new Runnable(){
       public void run()
            {
               Dialog d =  inst2.showBuilder(this, "test", "test");
               d.Show();
            }
        };
h.postDelayed(r, 5000);

В частности, блок кода внутри run выдает все виды исключений «} ожидаемых» и «пространство имен не может напрямую содержать элементы, такие как поля или методы».


person jmease    schedule 27.01.2012    source источник


Ответы (3)


Попробуйте использовать объект таймера:

    Timer mTimer = new Timer();
    mTimer.schedule(new TimerTask()
    {
        @Override
        public void run()
        {
            // Your code goes here
        }
    }, 1000); // 1sec

    final Handler handler = new Handler();

    Timer timer = new Timer();
    timer.schedule(new TimerTask()
    {
        @Override
        public void run()
        {
            handler.post(new Runnable()
            {
                public void run()
                {
                    // YOUR Code
                }
            });
        }
    }, 1000); // 1sec
person ChristopheCVB    schedule 27.01.2012
comment
Кажется, это работает нормально. Просто теперь нужно выяснить, как показать диалоговое окно предупреждения, если приложение находится в контексте, отличном от того, который запускает таймер. Но это отдельный вопрос. Спасибо! - person jmease; 27.01.2012

Вы можете запустить простой Thread, который будет спать в фоновом режиме в течение 5 минут, а затем вызывать функцию. Пока поток спит в фоновом режиме, пользовательский интерфейс не зависает. Когда поток завершит выполнение того, что вы хотите, вы можете настроить оповещения, отправив некоторые намерения в виде уведомлений и получив их в некоторых Broadcast Receivers. Надеюсь это поможет

person Aurelian Cotuna    schedule 27.01.2012

Используйте Handler.postDelayed(Runnable block); метод для выполнения задержки, так как Android также не рекомендует использовать таймер.

person jeet    schedule 27.01.2012