2015-06-19 1 views
2

, поскольку вы можете видеть, что последний вызов onTick происходит с 2 секундами, затем следующий вызов происходит почти через 2 секунды.countdowntimer пропускает несколько миллисекунд

@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 

tv = new TextView(this); 
this.setContentView(tv); 
SimpleDateFormat formatter = new SimpleDateFormat("dd.MM.yyyy, HH:mm:ss:SSS"); 
formatter.setLenient(false); 


newTime = "31.12.2015, 23:59:59:999"; 

try { 
    newDate = formatter.parse(newTime); 
    milliseconds = newDate.getTime(); 


    currentTime = System.nanoTime(); 

    diff = milliseconds - currentTime; 


} catch (Exception e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

MyCount counter = new MyCount(milliseconds, 1000); 
counter.start(); 


} 

CountDownTimer

public class MyCount extends CountDownTimer { 
    public MyCount(long millisInFuture, long countDownInterval) { 
     super(millisInFuture, countDownInterval); 
    } 

    @Override 
    public void onFinish() { 
    } 

    @Override 
    public void onTick(long millisUntilFinished) { 
     serverUptimeSeconds = (millisUntilFinished - System 
       .currentTimeMillis())/1000; 
     String serverUptimeText = String.format(
       "%d days %d hours %d minutes %d seconds", 
       serverUptimeSeconds/86400, 
       (serverUptimeSeconds % 86400)/3600, 
       ((serverUptimeSeconds % 86400) % 3600)/60, 
       ((serverUptimeSeconds % 86400) % 3600) % 60); 
     tv.setText(serverUptimeText); 
    } 
} 

Выход:

10 seconds 
8 seconds 
6 seconds 
4 seconds 

P.S ~ проверить видео для получения дополнительной информации

https://www.dropbox.com/s/7b3hme5ekdqpfi1/79789789.avi?dl=0

ответ

4

Попробуйте это:

TimerTask runTimerTask = new TimerTask() { 
    @Override 
    public void run() { 
     // your code 
    }); 
}; 

Timer timer = new Timer(); 
timer.scheduleAtFixedRate(runTimerTask, 0, 500); 
0

Я предполагаю, что есть какая-то ошибка в расчетах, это работает для меня так:

[Изменено] Как раз испытанное это снова и его работает нормально, обновление 1 в 1 секунды

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     tv = new TextView(this); 
     this.setContentView(tv); 
     SimpleDateFormat formatter = new SimpleDateFormat("dd.MM.yyyy, HH:mm:ss:SSS"); 
     formatter.setLenient(false); 


     String newTime = "31.12.2015, 23:59:59:999"; 

     long diff = 0; 
     try { 
      Date newDate = formatter.parse(newTime); 
      milliseconds = newDate.getTime(); 


      long currentTime = System.currentTimeMillis(); 

      diff = milliseconds - currentTime; 


     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     MyCount counter = new MyCount(diff, 1000); 
     counter.start(); 
    } 

I увидел, что вы также используете nano seconds, попробуйте вместо этого использовать miliseconds.

public class MyCount extends CountDownTimer { 
    private long serverUptimeSeconds; 

    public MyCount(long millisInFuture, long countDownInterval) { 
     super(millisInFuture, countDownInterval); 
    } 

    @Override 
    public void onFinish() { 
    } 

    @Override 
    public void onTick(long millisUntilFinished) { 
     //serverUptimeSeconds = (millisUntilFinished - System 
     //  .currentTimeMillis())/1000; 

     int seconds = (int) (millisUntilFinished/1000) % 60 ; 
     int minutes = (int) ((millisUntilFinished/(1000*60)) % 60); 
     int hours = (int) ((millisUntilFinished/(1000*60*60)) % 24); 

     String serverUptimeText = String.format(
       "%d hours %d minutes %d seconds", 
       hours, 
       minutes, 
       seconds); 
     tv.setText(serverUptimeText); 
    } 
} 

надеюсь, что это помогает;)

+0

вы можете изменить в своем коде .. Ур только с указанием часов, мин, сек – Gattsu

+0

только что сделал это, надеюсь, что это помогает теперь;) – iGoDa

+0

Мне тоже нужны дни .. помощь plz в той части – Gattsu