Android 時間維護服務 TimeService(針對於特殊定製需求)
阿新 • • 發佈:2018-11-04
此方法針對於無法自動獲取網路時間的特殊裝置,正常 Android 裝置直接呼叫
System.currentTimeMillis();
方法獲取當前時間即可。
TimeService 集成於 Service,實現與主Activity 的生命週期繫結。
TimeService 程式碼
public class TimeService extends Service { private TimeService mContext; private Timer mTimer;//定時器 private long currentTimeMillis = 0;//當前時間 private static final long UPDATE_TIME_OFFSET = 1 * 1000;//自動更新間隔 private CheckTimeTask checkTimeTask; private UpdateTimeTask updateTimeTask; //需用內部類繼承Binder,並定義方法獲取Service物件 private final IBinder binder = new TimeBinder(); //外部呼叫,獲取當前時間 public long getCurrentTimeMillis() { return currentTimeMillis; } //初始化服務時間 public void setCurrentTimeMillis(String dateStr) { if (StringUtil.isNullOrEmpty(dateStr)) { return; } try { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = sdf.parse(dateStr); currentTimeMillis = date.getTime(); } catch (ParseException e) { e.printStackTrace(); } } public class TimeBinder extends Binder { public TimeService getService() { return mContext; } } @Nullable @Override public IBinder onBind(Intent intent) { return binder; } @Override public void onCreate() { super.onCreate(); mContext = this; initData(); } private void initData() { mTimer = new Timer(); checkTimeTask = new CheckTimeTask(); updateTimeTask = new UpdateTimeTask(UPDATE_TIME_OFFSET); mTimer.schedule(checkTimeTask, 1000, 5 * 60 * 1000);//每5分鐘更新一次網路時間 mTimer.schedule(updateTimeTask, 0, UPDATE_TIME_OFFSET); } @Override public void onDestroy() { super.onDestroy(); if (mTimer != null) { mTimer.cancel(); mTimer = null; } if (checkTimeTask != null) { checkTimeTask.cancel(); checkTimeTask = null; } if (updateTimeTask != null) { updateTimeTask.cancel(); updateTimeTask = null; } } /** * 獲取伺服器時間 */ private class CheckTimeTask extends TimerTask { @Override public void run() { //=========此處為獲取網路時間請求======== //=============================== SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); if (bean != null ) { String dateStr = bean; try { Date date = sdf.parse(dateStr); currentTimeMillis = date.getTime(); } catch (ParseException e) { e.printStackTrace(); } } } } /** * 定時更新當前時間 */ private class UpdateTimeTask extends TimerTask { /** * 更新時間間隔 */ private long offset = 0; public UpdateTimeTask(long offset) { this.offset = offset; } @Override public void run() { currentTimeMillis += offset; } } }