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;
        }
    }


}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM