1. 程式人生 > >Android 每隔一段時間執行方法。計時器。

Android 每隔一段時間執行方法。計時器。

程式碼:

Timer timer = new Timer(true);
TimerTask timerTask = new TimerTask() {
    @Override
    public void run() {
        Log.i("lllll111" ,"上班時間,傳送位置。");
    }
};
timer.schedule(timerTask, 0,2000);

schedule方法有三個引數
第一個引數就是TimerTask型別的物件,我們實現TimerTask的run()方法就是要週期執行的一個任務;
第二個引數有兩種型別,第一種是long型別,表示多長時間後開始執行,另一種是Date型別,表示從那個時間後開始執行;
第三個引數就是執行的週期,為long型別。
 
schedule方法還有一種兩個引數的執行過載,第一個引數仍然是TimerTask,第二個表示為long的形式表示多長時間後執行一次,為Date就表示某個時間後執行一次。?
 
Timer就是一個執行緒,使用schedule方法完成對TimerTask的排程,多個TimerTask可以共用一個Timer,也就是說Timer物件呼叫一次schedule方法就是建立了一個執行緒

//以下是幾種排程task的方法:  
 
//time為Date型別:在指定時間執行一次。  
timer.schedule(task, time);  
 
//firstTime為Date型別,period為long,表示從firstTime時刻開始,每隔period毫秒執行一次。  
timer.schedule(task, firstTime, period);    //較為常用 ,上面的示例就是這個方法
 
//delay 為long型別:從現在起過delay毫秒執行一次。  
timer.schedule(task, delay);
--------------------- 
 

並且呼叫一次schedule 後TimerTask是無限制的迴圈下去的,使用Timer的cancel()停止操作。當然同一個Timer執行一次cancel()方法後,所有Timer執行緒都被終止。


獲取當前時間

我這裡只獲取了小時

yyyy-MM-dd HH:mm:ss

    //獲取當前時間戳
    long timeStamp = System.currentTimeMillis();
    String time = stampToDate(timeStamp);
    Log.d("xxxxx", time);

    /*
     * 將時間轉換為時間戳
     */
    public String dateToStamp(String time) throws ParseException {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH");
        Date date = simpleDateFormat.parse(time);
        long ts = date.getTime();
        return String.valueOf(ts);
    }

    /*
     * 將時間戳轉換為時間
     */
    public String stampToDate(long timeMillis){
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH");
        Date date = new Date(timeMillis);
        return simpleDateFormat.format(date);
    }