如何在android中的特定时间启动计时器

时间:2013-01-01 12:20:07

标签: android timer handler

我有一个问题。我想在特定时间启动计时器。即,我有时间说,05:10:02。然后计时器将从05:10:02开始。 例如,05:10:02,05:10:03,05:10:04等等。

当我打开活动时,它应该获取当前时间,并且计时器将在问题中开始上述描述。

我有以下代码。

    SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
    sdf.setTimeZone(TimeZone.getTimeZone("GMT"));

    inputString = str;  //05:10:02


    try {
        date = sdf.parse(inputString);

        Log.i("Test", "in milliseconds: " + date.getTime());  
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    if(mStartTimeGlobal== 0L) {
        mStartTimeGlobal = date.getTime();
        mHandlerGlobal.removeCallbacks(mUpdateTimeTaskGlobal); 
        mHandlerGlobal.postDelayed(mUpdateTimeTaskGlobal, 100);
    }



     private Runnable mUpdateTimeTaskGlobal = new Runnable(){

    public void run() {

        //DecimalFormat df = new DecimalFormat("##.####");

        final long start = mStartTimeGlobal;
        long millis = date.getTime();

        int seconds = (int) (millis / 1000);
           int minutes = seconds / 60;
           seconds = seconds % 60;
           int hours = seconds/3600;

           String timer = String.format("%02d", hours) + ":" + String.format("%02d", minutes) + ":" + String.format("%02d", seconds);

           ///mTotalTimeTakenGlobal = timer;

           txt_start_timer.setText(timer);                                                                         
           mHandlerGlobal.postDelayed(this, 200);               

     }    
 };

1 个答案:

答案 0 :(得分:1)

使用Timer

Date date = new Date("...")
Timer t = new Timer(); 
t.schedule(new TimerTask() {
   public void run() {
     // do your actions
   }
}, date);

您的任务将在非GUI线程中启动,因此在时间事件发生后使用runOnUiThread更新您的界面。这种方法的局限性在于您的程序必须运行才能获得通知,它不会在给定时间自动启动。您可以在同一个计时器上安排多个任务,以便它们可以在不同的日期开始。