zoukankan      html  css  js  c++  java
  • 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;
            }
        }
    
    
    }
    
  • 相关阅读:
    git push&pull命令详解
    Git常用命令总结
    SpringBoot入门之事件监听
    SpringBoot整合Redis
    十九:JDBC操作事务
    十八:使用JDBC进行批处理
    十七:使用JDBC处理MySQL大数据
    十六:使用JDBC对数据库进行CRUD
    十五:JDBC学习入门
    SpringBoot使用@Scheduled创建定时任务
  • 原文地址:https://www.cnblogs.com/ProMonkey/p/5765208.html
Copyright © 2011-2022 走看看