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 '^ ...
随机推荐
- oracle数据库导入、导出
导出:exp BFXXLZ/BFXXLZ123@192.168.63.63:1521/ORCL file=d:\BFXXLZ.dmp 导入:imp BFXXLZ/BFXXLZ123@ORCL file ...
- Android Studio启动模拟器
创建模拟器时出现vt x is disabled in bios 出现错误提示:"Intel HAXM is required to run this AVD,VT-x is disable ...
- docker安装
系统要求:需要一个64位的centos7操作系统和版本3.10或更高版本的Linux内核 开始安装: uname -r //查看内核版本yum -y update //更新系统更新到最新 #安装d ...
- 初学c# -- 学习笔记(七) RichTextBox支持GIF
园子里许明吉博客写的一篇,刚好用到这个,写的非常好.转过来了 不过在应用中也有一些问题,win10下不能中文输入,凑合着进行了修改, 下面是原来的代码: private void button2_Cl ...
- PL/SQL EO 设计与开发
1.INSERT 调用PL/SQL 去insert的时候,没有使用super(),此时应当自己创建callable statement: 调用checkErrors()方法在执行 callable s ...
- Tcc学习笔记(二) 安装和配置
1.下载和编译 去repo.or.cz/tinycc.git下载最新的snapshot压缩包, 或者用git命令下载: git clone git://repo.or.cz/tinycc.git . ...
- 国内最给力五大免费VPN商家
国内有很多提供免费VPN的商家,水平也是参差不齐,有的用心服务,为客户提供优质免费VPN线路,进而赢得客户的信任.有的则对免费线路敷衍了事,只对付费线路“尽职尽责”,从而流失大量潜在VIP客户. 笔者 ...
- 【NoSql】MongoDb
[NoSql]MongoDb 一. 文档 1. 官网 2. C# Driver 3. C# 开发文档 二. 命令 1. --config "C:\mongodb\mongod.cfg&quo ...
- afnetworking报错pointer being freed was not allocated
报错内容 YangTao(57008,0x7000002a0000) malloc: *** error for object 0x6180000d6490: pointer being freed ...
- 笔记002:javascript简介
1. HTML服务于内容 CSS服务于表现 Javascript服务于行为(一切东西的粘合剂) 2.javascript能运行多种宿主环境中(Web浏览器最普遍) 3.历史 1995 Netscape ...