1. 程式人生 > >專案後臺服務監聽版本變化

專案後臺服務監聽版本變化

/**
* 用於檢查程式版本更新的後臺服務
*/

public class CheckVersionService extends Service {
private static final int MSG_NEW_VERSION = 1;
private static final long CHECK_PERIOD = 1000*60*60;//1小時監測一次
private Timer mTimer;
private VersionInfo mVersionInfo;

@Override
public IBinder onBind(Intent arg0) {
    return null;
}

/**
 * 啟動定時器進行定時檢查更新
 */
@Override
public void onCreate() {
    super.onCreate();
    mTimer = new Timer();
//該方法必然會呼叫 TimerTask 類 TimerTask 類 中的 run() 方法,這個引數就 是這兩者之間時間的差值,也就是說,使用者呼叫 schedule() 方法後,要等待這麼長的時間才可以第一次執行 run() 方法。
    mTimer.schedule(new CheckTask(), 0, CHECK_PERIOD);
}

/**
 * 服務銷燬時取消定時器
 */
@Override
public void onDestroy() {
    super.onDestroy();
    mTimer.cancel();
}

private class CheckTask extends TimerTask {
    @Override
    public void run() {
        try {

            if (newVersion > curVersion) {
                mHandler.sendEmptyMessage(MSG_NEW_VERSION);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

private Handler mHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        switch (msg.what) {
        case MSG_NEW_VERSION:
           //發現新版本時,跳到相應的Avtivity中去下載更新包
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(intent);
            break;
        }
    }
};

}

註釋: mTimer.schedule(new CheckTask(), 0, CHECK_PERIOD);
第一個引數"new CheckTask(event.getServletContext())":

是 TimerTask 類,在包:import java.util.TimerTask .使用者要繼承該類,並實現 public void run() 方法,因為 TimerTask 類實現了 Runnable 介面。

 第二個引數"0"的意思是:(0就表示無延遲)

 當你呼叫該方法後,該方法必然會呼叫 TimerTask 類 TimerTask 類 中的 run() 方法,這個引數就是這兩者之間時間的差值,也就是說,使用者呼叫 schedule() 方法後,要等待這麼長的時間才可以第一次執行 run() 方法。

第三個引數"60*60*1000"的意思就是:
(單位是毫秒60*60*1000為一小時)
(單位是毫秒3*60*1000為三分鐘)

第一次呼叫之後,從第二次開始每隔多長的時間呼叫一次 run() 方法。

`