2015-02-05 2 views
0

Я показываю время в секундах, используя Toast внутри Countdown Timer. Но я чувствую, что дисплей Toast фактически отстает от секунд реального времени, есть ли лучший способ отобразить сообщение должным образом ?«Таймер Toast» показывает отставание, а затем фактический «Таймер обратного отсчета»

CountDownTimer timer = new CountDownTimer(20000, 1000) { 

    @Override 
    public void onTick(long millisUntilFinished) { 

     Toast.makeText(getApplicationContext(), "Disabling Task, Please wait : " + millisUntilFinished/1000, Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public void onFinish() { 
     Toast.makeText(getApplicationContext(), "Congratulations!! Time out", Toast.LENGTH_SHORT).show(); 
    } 
}.start(); 

ответ

1

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

Toast mToast = null; 

CountDownTimer timer = new CountDownTimer(20000, 1000) { 

    @Override 
    public void onTick(long millisUntilFinished) { 
     if (mToast != null) mToast.cancel(); 
     mToast = Toast.makeText(getApplicationContext(), "Disabling Task, Please wait : " + millisUntilFinished/1000, Toast.LENGTH_SHORT); 
     mToast.show(); 
    } 

    @Override 
    public void onFinish() { 
     if (mToast != null) mToast.cancel(); 
     mToast = Toast.makeText(getApplicationContext(), "Congratulations!! Time out", Toast.LENGTH_SHORT); 
     mToast.show(); 
    } 
}.start(); 

Предупреждение! Это не работает на Android 2.3.

+0

Thanks Eugene, будет ли это решить проблему задержки. Будет ли она синхронизирована с фактическими секундами секунд? – user45678

+0

Синхронизация отсутствует. Тост просто отобразит то, что вы скажете, чтобы отобразить его. И если я правильно понял, каждый новый тост будет появляться каждую секунду. Он будет работать так, как вы планировали. Иногда он может пропустить секунду (только на дисплее, выполнение все еще в порядке), поэтому вам нужно выполнить округление на 'millisUntilFinished/1000'. –

+0

ОК, отлично, спасибо большое. Позвольте мне попробовать – user45678