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 '^ ...
随机推荐
- Highcharts 在低版本 IE 上使用注意事项
来源:https://segmentfault.com/a/1190000004272693 很多人经常遇到图表在主流浏览器上运行正常,在低版本IE(包括IE6.IE7.IE8等)下运行出错(图表显示 ...
- NOR Flash擦写和原理分析
NOR Flash擦写和原理分析 1. NOR FLASH 的简单介绍 NOR FLASH 是很常见的一种存储芯片,数据掉电不会丢失.NOR FLASH支持Execute On Chip,即程序可以直 ...
- lisp中的cons
看到ANSI Common Lisp 第三章的游程编码时,就发现作者很准确的使用了list和cons来生成目标列表,虽然list是由cons扩展而来,区别也仅仅是最后一个元素的加入方式,于是勾起了之前 ...
- thinkphp 动态 级联
<div class="form-item"> <label class="item-label">一级分类<span class ...
- chrome浏览器开发者工具之同步修改至本地
相信好多小伙伴喜爱webpack的热加载技术,省时而又不繁琐,讨厌F5或者Ctrl+F5. 嘿嘿,现在介绍大家一个在浏览器中修改直接同步到本地代码修改的方法--- (程序员都是从0开始数数的!) 第0 ...
- Android部分调试开关
开启 GPU Render 的profiling bar: adb shell setprop debug.hwui.profile visual_bars #或visual_lines adb sh ...
- Android笔记:如何在Fragment里使用findViewById()方法?
在Activity中,可以直接用findViewById(int id),通过xml的id来找到对应的View. 查找官方的api,具体如下: https://developer.android.go ...
- java_method_stringUtils
/** * 字符串英文单双引号处理,将中英文引号转为中文的引号 * @param temp * @return */ public static String getStringDatabase(St ...
- Error:Protocol family unavailable
在环境变量添加:_JAVA_OPTIONS 变量值为:-Djava.net.preferIPv4Stack=true 环境变量添加方法链接: http://jingyan.baidu.com/arti ...
- SQL Server 获取最后一天(指定时间的月最后一天日期)
/* author OceanHo @ 2015-10-23 10:14:21 获取指定时间字符串指定日期的月最后一天日期 */ IF OBJECT_ID('get_LastDayDate') IS ...