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;
- }
- }
- }
Android 时间维护服务 TimeService(针对于特殊定制设备)的更多相关文章
- Mosquitto搭建Android推送服务(一)MQTT简介
总体概要: MQTT系列文章分为4部分 1.MQTT简介 2.mosquitto服务器搭建 3.编写Mosquitto的可视化工具 4.使用Mosquitto完成Android推送服务 文章钢要: 对 ...
- Android窗口管理服务WindowManagerService对壁纸窗口(Wallpaper Window)的管理分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8550820 Android系统中,壁纸窗口和输 ...
- Android推送服务——百度云推送
一.推送服务简介 消息推送,顾名思义,是由一方主动发起,而另一方与发起方以某一种方式建立连接并接收消息.在Android开发中,这里的发起方我们把它叫做推送服务器(Push Server),接收方叫做 ...
- Android 媒体存储服务(二)
Android 媒体存储服务 简介: 本文是<深入Android媒体存储服务>系列第二篇,简要介绍媒体存储服务扫描文件的流程.文中介绍的是 Android 4.2. Android 有一套 ...
- Android 媒体存储服务(一)
Android 媒体存储服务 本文介绍如何在 Android 中,开发者的 APP 如何使用媒体存储服务(包含MediaScanner.MediaProvider以及媒体信息解析等部分),包括如何把 ...
- Android调用Web服务
现在大部分应用程序都把业务逻辑处理,数据调用等功能封装成了服务的形式,应用程序只需要调用这些web服务就好了,在这里就不赘述web服务的优点了.本文总结如何在android中调用Web服务,通过传递基 ...
- Android窗口管理服务WindowManagerService切换Activity窗口(App Transition)的过程分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8596449 在Android系统中,同一时刻只 ...
- Android窗口管理服务WindowManagerService显示Activity组件的启动窗口(Starting Window)的过程分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8577789 在Android系统中,Activ ...
- linux下维护服务器之常用命令
linux下维护服务器之常用命令! 第1套如下: 正则表达式: 1.如何不要文件中的空白行和注释语句: [root@localhost ~]# grep -v '^$' 文件名 |grep -v '^ ...
随机推荐
- Servlet学习四——传输文本
在最初使用Servlet时,觉得get方法很好用,也了解到传输一般性的变量,除了文件流和安全性外,都可以用get方法,所以,也就习惯用get方法了. 在实现一个注册方法过程中,中文注册都是乱码,跟踪后 ...
- Math DayTwo
(1)Excel Sheet Column Number 解题思路:将26进制的数转化为10进制 代码如下: public class Solution { public int titleToNum ...
- Git学习(一)——Git介绍与安装
一.Git诞生 Linus在1991年创建了Linux,从此,Linux系统不断发展,成为最大的服务器系统软件. 2005年,Linus用C编写了一个分布式版本控制工具--Git. 二.集中式vs分布 ...
- 使用id名称和name直接获取元素
我们知道一些第三方的js库对如何快速选取html中的元素做了一些简化,貌似十分高深莫测,其实也不然.而且js本身自带了对于特殊元素的简便选取的方法,下面就为大家简单介绍下. 在html中,一般最直接的 ...
- spring-data-redis注册fastjson序列化工具
使用spring-data-redis的时候,其序列化工具自带:
- TDDL DataSource
TDDL DataSource 分为 AtomDataSource GroupDatasource 他们两者没有依赖关系, 都实现了 JDBC 规范, 可以作为独立的 datasource 单独使用 ...
- 初学git(一):创建本地“仓库”
初学git(一):创建本地“仓库” 作为一个初学者,我是跟着廖学峰老师的官方博客学习,这里只是做个笔记,哈哈,关于git的历史.和其他版本控制的对比啥的,我就不说了.另外,我这里用的是Mac OS X ...
- libxml2 移植 arm9
准备工作: 1.libxml2软件版本:libxml2-2.6.32.tar.gz 2.交叉编译工具链:arm-none-linux-guneabi 软件安装: 1.设置环境变量: export PA ...
- POJ 3281 Dining 最大流
饮料->牛->食物. 牛拆成两点. //#pragma comment(linker, "/STACK:1024000000,1024000000") #include ...
- 一个Angular模块中可以声明哪些组件?
一个Angular模块中可以声明哪些组件? (1) controller 控制器 (2) directive 指令 (3) function ...