專案後臺服務監聽版本變化
阿新 • • 發佈:2019-02-17
/**
* 用於檢查程式版本更新的後臺服務
*/
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() 方法。
`