此方法针对于无法自动获取网络时间的特殊设备,正常 Android 设备直接调用

  1. System.currentTimeMillis();

方法获取当前时间即可。

TimeService 集成于 Service,实现与主Activity 的生命周期绑定。

TimeService 代码

  1. public class TimeService extends Service {
  2. private TimeService mContext;
  3. private Timer mTimer;//定时器
  4. private long currentTimeMillis = 0;//当前时间
  5. private static final long UPDATE_TIME_OFFSET = 1 * 1000;//自动更新间隔
  6. private CheckTimeTask checkTimeTask;
  7. private UpdateTimeTask updateTimeTask;
  8.  
  9. //需用内部类继承Binder,并定义方法获取Service对象
  10. private final IBinder binder = new TimeBinder();
  11. //外部调用,获取当前时间
  12. public long getCurrentTimeMillis() {
  13. return currentTimeMillis;
  14. }
  15. //初始化服务时间
  16. public void setCurrentTimeMillis(String dateStr) {
  17. if (StringUtil.isNullOrEmpty(dateStr)) {
  18. return;
  19. }
  20. try {
  21. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  22. Date date = sdf.parse(dateStr);
  23. currentTimeMillis = date.getTime();
  24. } catch (ParseException e) {
  25. e.printStackTrace();
  26. }
  27. }
  28.  
  29. public class TimeBinder extends Binder {
  30. public TimeService getService() {
  31. return mContext;
  32. }
  33. }
  34.  
  35. @Nullable
  36. @Override
  37. public IBinder onBind(Intent intent) {
  38. return binder;
  39. }
  40.  
  41. @Override
  42. public void onCreate() {
  43. super.onCreate();
  44. mContext = this;
  45. initData();
  46. }
  47.  
  48. private void initData() {
  49. mTimer = new Timer();
  50. checkTimeTask = new CheckTimeTask();
  51. updateTimeTask = new UpdateTimeTask(UPDATE_TIME_OFFSET);
  52.  
  53. mTimer.schedule(checkTimeTask, 1000, 5 * 60 * 1000);//每5分钟更新一次网络时间
  54. mTimer.schedule(updateTimeTask, 0, UPDATE_TIME_OFFSET);
  55. }
  56.  
  57. @Override
  58. public void onDestroy() {
  59. super.onDestroy();
  60. if (mTimer != null) {
  61. mTimer.cancel();
  62. mTimer = null;
  63. }
  64.  
  65. if (checkTimeTask != null) {
  66. checkTimeTask.cancel();
  67. checkTimeTask = null;
  68. }
  69.  
  70. if (updateTimeTask != null) {
  71. updateTimeTask.cancel();
  72. updateTimeTask = null;
  73. }
  74. }
  75.  
  76. /**
  77. * 获取服务器时间
  78. */
  79. private class CheckTimeTask extends TimerTask {
  80.  
  81. @Override
  82. public void run() {
  83.  
  84. //=========此处为获取网络时间请求========
  85. //===============================
  86. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  87. if (bean != null ) {
  88. String dateStr = bean;
  89. try {
  90. Date date = sdf.parse(dateStr);
  91. currentTimeMillis = date.getTime();
  92. } catch (ParseException e) {
  93. e.printStackTrace();
  94. }
  95. }
  96. }
  97. }
  98.  
  99. /**
  100. * 定时更新当前时间
  101. */
  102. private class UpdateTimeTask extends TimerTask {
  103. /**
  104. * 更新时间间隔
  105. */
  106. private long offset = 0;
  107.  
  108. public UpdateTimeTask(long offset) {
  109. this.offset = offset;
  110. }
  111.  
  112. @Override
  113. public void run() {
  114. currentTimeMillis += offset;
  115. }
  116. }
  117.  
  118. }

Android 时间维护服务 TimeService(针对于特殊定制设备)的更多相关文章

  1. Mosquitto搭建Android推送服务(一)MQTT简介

    总体概要: MQTT系列文章分为4部分 1.MQTT简介 2.mosquitto服务器搭建 3.编写Mosquitto的可视化工具 4.使用Mosquitto完成Android推送服务 文章钢要: 对 ...

  2. Android窗口管理服务WindowManagerService对壁纸窗口(Wallpaper Window)的管理分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8550820 Android系统中,壁纸窗口和输 ...

  3. Android推送服务——百度云推送

    一.推送服务简介 消息推送,顾名思义,是由一方主动发起,而另一方与发起方以某一种方式建立连接并接收消息.在Android开发中,这里的发起方我们把它叫做推送服务器(Push Server),接收方叫做 ...

  4. Android 媒体存储服务(二)

    Android 媒体存储服务 简介: 本文是<深入Android媒体存储服务>系列第二篇,简要介绍媒体存储服务扫描文件的流程.文中介绍的是 Android 4.2. Android 有一套 ...

  5. Android 媒体存储服务(一)

    Android 媒体存储服务 本文介绍如何在 Android 中,开发者的 APP 如何使用媒体存储服务(包含MediaScanner.MediaProvider以及媒体信息解析等部分),包括如何把 ...

  6. Android调用Web服务

    现在大部分应用程序都把业务逻辑处理,数据调用等功能封装成了服务的形式,应用程序只需要调用这些web服务就好了,在这里就不赘述web服务的优点了.本文总结如何在android中调用Web服务,通过传递基 ...

  7. Android窗口管理服务WindowManagerService切换Activity窗口(App Transition)的过程分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8596449 在Android系统中,同一时刻只 ...

  8. Android窗口管理服务WindowManagerService显示Activity组件的启动窗口(Starting Window)的过程分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8577789 在Android系统中,Activ ...

  9. linux下维护服务器之常用命令

    linux下维护服务器之常用命令! 第1套如下: 正则表达式: 1.如何不要文件中的空白行和注释语句: [root@localhost ~]# grep -v '^$' 文件名 |grep -v '^ ...

随机推荐

  1. Servlet学习四——传输文本

    在最初使用Servlet时,觉得get方法很好用,也了解到传输一般性的变量,除了文件流和安全性外,都可以用get方法,所以,也就习惯用get方法了. 在实现一个注册方法过程中,中文注册都是乱码,跟踪后 ...

  2. Math DayTwo

    (1)Excel Sheet Column Number 解题思路:将26进制的数转化为10进制 代码如下: public class Solution { public int titleToNum ...

  3. Git学习(一)——Git介绍与安装

    一.Git诞生 Linus在1991年创建了Linux,从此,Linux系统不断发展,成为最大的服务器系统软件. 2005年,Linus用C编写了一个分布式版本控制工具--Git. 二.集中式vs分布 ...

  4. 使用id名称和name直接获取元素

    我们知道一些第三方的js库对如何快速选取html中的元素做了一些简化,貌似十分高深莫测,其实也不然.而且js本身自带了对于特殊元素的简便选取的方法,下面就为大家简单介绍下. 在html中,一般最直接的 ...

  5. spring-data-redis注册fastjson序列化工具

    使用spring-data-redis的时候,其序列化工具自带:

  6. TDDL DataSource

    TDDL DataSource 分为 AtomDataSource GroupDatasource 他们两者没有依赖关系, 都实现了 JDBC 规范, 可以作为独立的 datasource 单独使用 ...

  7. 初学git(一):创建本地“仓库”

    初学git(一):创建本地“仓库” 作为一个初学者,我是跟着廖学峰老师的官方博客学习,这里只是做个笔记,哈哈,关于git的历史.和其他版本控制的对比啥的,我就不说了.另外,我这里用的是Mac OS X ...

  8. libxml2 移植 arm9

    准备工作: 1.libxml2软件版本:libxml2-2.6.32.tar.gz 2.交叉编译工具链:arm-none-linux-guneabi 软件安装: 1.设置环境变量: export PA ...

  9. POJ 3281 Dining 最大流

    饮料->牛->食物. 牛拆成两点. //#pragma comment(linker, "/STACK:1024000000,1024000000") #include ...

  10. 一个Angular模块中可以声明哪些组件?

    一个Angular模块中可以声明哪些组件? (1) controller        控制器 (2) directive                指令 (3) function         ...