2012-06-15 83 views
4

我試圖做一個應用程序,每分鐘更改UI,但我與postAtTime函數掙扎很多,因爲我不能讓它觸發。我試過用postDelay它可以工作,但postAtTime應該給我更多的精度。postAtTime沒有觸發

我得到當前時間並設置日曆,然後在日期中添加一分鐘並調用postAtTime,但它不會觸發。讓我們看看你能否幫助我。

private Runnable showMinute = new Runnable() { 
    public void run() { 
     calendar = Calendar.getInstance(); 
     minute = calendar.get(Calendar.MINUTE); 
     minute = minute % 10; 

     switch (minute){ 
     case 0: numero.setImageResource(R.drawable.b0); 
      break; 
     case 1: numero.setImageResource(R.drawable.b1); 
      break; 
     case 2: numero.setImageResource(R.drawable.b2); 
      break; 
     case 3: numero.setImageResource(R.drawable.b3); 
      break; 
     case 4: numero.setImageResource(R.drawable.b4); 
      break; 
     case 5: numero.setImageResource(R.drawable.b5); 
      break; 
     case 6: numero.setImageResource(R.drawable.b6); 
      break; 
     case 7: numero.setImageResource(R.drawable.b7); 
      break; 
     case 8: numero.setImageResource(R.drawable.b8); 
      break; 
     case 9: numero.setImageResource(R.drawable.b9); 
      break; 
     default: 
      break; 
     } 


     handler.removeCallbacks(mostrarHora); 
     calendar.add(Calendar.MINUTE, 1); 
     calendar.set(Calendar.SECOND, 0); 
     calendar.set(Calendar.MILLISECOND, 0); 
     handler.postAtTime(showMinute, calendar.getTimeInMillis()); 
    } 
    }; 

回答

8

您正在使用絕對時間(來自Calendar類)。 handler.postAtTime timeformat是自啓動以來ms的金額。

您應該使用SystemClock.uptimeMillis()進行計算。

+1

謝謝!自啓動以來,不知道handler.postAtTime使用了ms。但是,在那裏,有什麼辦法可以讓某些事情在確切的時間觸發(例如12:30)? – Nemesis

4

好吧,最後我解決了它。如果有人有同樣的問題,這是解決方案。

private Runnable mostrarHora = new Runnable() { 
    public void run() { 
     int segundo; 
     long start, diferencia; 
     calendar = Calendar.getInstance(); 
     diferencia = calendar.getTimeInMillis()-SystemClock.uptimeMillis(); 
     segundo = calendar.get(Calendar.MINUTE); 
     segundo = segundo % 10; 

     switch (segundo){ 
     case 0: numero.setImageResource(R.drawable.b0); 
      break; 
     case 1: numero.setImageResource(R.drawable.b1); 
      break; 
     case 2: numero.setImageResource(R.drawable.b2); 
      break; 
     case 3: numero.setImageResource(R.drawable.b3); 
      break; 
     case 4: numero.setImageResource(R.drawable.b4); 
      break; 
     case 5: numero.setImageResource(R.drawable.b5); 
      break; 
     case 6: numero.setImageResource(R.drawable.b6); 
      break; 
     case 7: numero.setImageResource(R.drawable.b7); 
      break; 
     case 8: numero.setImageResource(R.drawable.b8); 
      break; 
     case 9: numero.setImageResource(R.drawable.b9); 
      break; 
     default: 
      break; 
     } 


     handler.removeCallbacks(mostrarHora); 
     calendar.set(Calendar.MINUTE, calendar.get(Calendar.MINUTE)+1); 
     calendar.set(Calendar.SECOND, 0); 
     calendar.set(Calendar.MILLISECOND, 0); 
     start = calendar.getTimeInMillis()-diferencia; 
     handler.postAtTime(mostrarHora, start); 
    } 
    };