1. 程式人生 > >Android 時間維護服務 TimeService(針對於特殊定製需求)

Android 時間維護服務 TimeService(針對於特殊定製需求)

此方法針對於無法自動獲取網路時間的特殊裝置,正常 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;
        }
    }
 
 
}