最近在做一个GPS的应用,其中界面使用Fragment实现切换。其中一个Fragment中实现了数字时钟,即每一秒就更新数字显示那种~~

结果在切换Fragment时,出现了下面的错误:

01-23 14:54:19.891: D/AndroidRuntime(32574): Shutting down VM
01-23 14:54:19.891: E/AndroidRuntime(32574): FATAL EXCEPTION: main
01-23 14:54:19.891: E/AndroidRuntime(32574): Process: com.mobisummer.msgps, PID: 32574
01-23 14:54:19.891: E/AndroidRuntime(32574): java.lang.IllegalStateException: Fragment NumbersFragment{dab2ec6} not attached to Activity
01-23 14:54:19.891: E/AndroidRuntime(32574):    at android.app.Fragment.getResources(Fragment.java:802)
01-23 14:54:19.891: E/AndroidRuntime(32574):    at android.app.Fragment.getString(Fragment.java:824)
01-23 14:54:19.891: E/AndroidRuntime(32574):    at com.mobisummer.msgps.NumbersFragment.setDateAndTime(NumbersFragment.java:197)
01-23 14:54:19.891: E/AndroidRuntime(32574):    at com.mobisummer.msgps.NumbersFragment.access$0(NumbersFragment.java:194)
01-23 14:54:19.891: E/AndroidRuntime(32574):    at com.mobisummer.msgps.NumbersFragment$1.handleMessage(NumbersFragment.java:73)
01-23 14:54:19.891: E/AndroidRuntime(32574):    at android.os.Handler.dispatchMessage(Handler.java:102)
01-23 14:54:19.891: E/AndroidRuntime(32574):    at android.os.Looper.loop(Looper.java:145)
01-23 14:54:19.891: E/AndroidRuntime(32574):    at android.app.ActivityThread.main(ActivityThread.java:5972)
01-23 14:54:19.891: E/AndroidRuntime(32574):    at java.lang.reflect.Method.invoke(Native Method)
01-23 14:54:19.891: E/AndroidRuntime(32574):    at java.lang.reflect.Method.invoke(Method.java:372)
01-23 14:54:19.891: E/AndroidRuntime(32574):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
01-23 14:54:19.891: E/AndroidRuntime(32574):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)

一开始以为是Fragment的问题,但慢慢分析日志,发现开始出现问题是在时钟实现的过程中,那就必须回看时钟实现的代码:

private void updateDateAndTime() {if (timer == null) {timer = new Timer(true); }if (timer != null) {if (timerTask != null) {timerTask.cancel();}timerTask = new MyTimerTask();timer.schedule(timerTask, 0, 1000);}}private Handler mHandler = new Handler() {@Overridepublic void handleMessage(Message msg) {// TODO Auto-generated method stubsuper.handleMessage(msg);if (msg.what == 1) {//更新时间setDateAndTime();}}};class MyTimerTask extends TimerTask {@Overridepublic void run() {// TODO Auto-generated method stubMessage msg = new Message();msg.what = 1;mHandler.sendMessage(msg);}}

实现时钟也是很简单,就是运用一个定时器Timer,定时一秒就执行一次任务TimerTask,任务TimerTask就是通过Handler通知UI线程更新时钟显示。
其实Timer就是一个线程,使用schedule方法完成对TimerTask的调度,多个TimerTask可以共用一个Timer,也就是说Timer对象调用一次schedule方法就是创建了一个线程,并且调用一次schedule 后TimerTask是无限制的循环下去的,使用Timer的cancel()停止操作。当然同一个Timer执行一次cancel()方法后,所有Timer线程都被终
可见,上面我们还中cancel掉TimerTask 和Timer,否则该线程实例一直运行,当然会出错了。
所以添加下面的代码:

    private void cancelTimer() {timerTask.cancel();timerTask = null;timer.cancel();timer = null;}

到此,完成。当然实现数字时钟的其他细节就不一一讲述了,下一节,我会讲到如何实现LED数字时钟的“8”字显示

Timer实现数字时钟相关推荐

  1. Timer+TimerTask实现数字时钟

    成果展示 布局 布局主题背景颜色采用#000000(纯黑色),各TextView字体颜色采用#FFFFFF(纯白色). 使用五个TextView,分别实现小时:分钟,秒钟,am,pm,周日,具体日期几 ...

  2. Qt样例学习1(数字时钟)

    /*main.cpp*/ #include <QApplication> #include <QTextCodec> #include "digitalclock.h ...

  3. java多线程世界时钟_Java实现的动态数字时钟功能示例【显示世界时间】

    本文实例讲述了Java实现的动态数字时钟功能.分享给大家供大家参考,具体如下: 构建: 1. Clock继承 JFrame 为运行页面 2. ClockText 测试类 创建 Clock 对象 运行效 ...

  4. VHDL数字时钟设计及引脚锁定方法

    目录 引言 课设题目 时,分,秒模块 分频模块 按键去抖模块 调时模块 蜂鸣器报警模块 扫描信号输出模块 二进制转八段数码管显示信号 结果展示 小结 引言 最近快期末考试周了,课设任务也随之而来.这个 ...

  5. java如何实现动态时钟_Java实现动态数字时钟

    本文实例为大家分享了Java实现动态数字时钟的具体代码,供大家参考,具体内容如下 构建: Clock继承 JFrame 为运行页面 ClockText 测试类 创建 Clock 对象 运行效果: 具体 ...

  6. js选中html的数字设置倒计时,JS实现的网页倒计时数字时钟效果

    本文实例讲述了JS实现的网页倒计时数字时钟效果.分享给大家供大家参考.具体实现方法如下: 代码如下: javascript实现的倒计时时钟 body,div{margin:0;padding:0;} ...

  7. java数字时钟_Java实现动态数字时钟

    本文实例为大家分享了Java实现动态数字时钟的具体代码,供大家参考,具体内容如下 构建: Clock继承 JFrame 为运行页面 ClockText 测试类 创建 Clock 对象 运行效果: 具体 ...

  8. android launcher桌面数字时钟及appwidget更新问题

    代码下载http://download.csdn.net/detail/ldinvicible/5010177 一.桌面数字时钟控件效果图 二. 1.准备好一个Widget的显示布局文件 layout ...

  9. 开发数字时钟桌面小控件

    随时随地技术实战干货,获取项目源码.学习资料,请关注源代码社区公众号(ydmsq666) 所谓桌面小控件,就是指能直接显示在Android系统桌面的小程序,比如模拟时钟等.桌面小控件是通过Broadc ...

最新文章

  1. 7月份没啥写的。。。
  2. mysql5.7忘记root密码的修改方法
  3. 如何从多个项目创建 ASP.NET 应用程序以进行组开发
  4. 个推用户画像的实践与应用
  5. Android seLinux 设置
  6. IntelliJ IDEA14 配置 SVN
  7. 2440启动文件分析
  8. 计算机考研百天,2015考研计算机专业复习百天周计划
  9. python数组取数_python 取数组
  10. 朴素贝叶斯算法优缺点
  11. 袖珍计算器c语言设计源码,VB程序题:编一模拟袖珍计算器的完整程序,界面如下图所示。要求:输入两个操作数和一个操作符,根据操作符决定所做的运算。 VB源码 龚沛曾...
  12. 数据源、元数据、数据元
  13. 电力系统分析计算机辅助试题,电力系统计算机辅助分析.docx
  14. CSS属性设置鼠标为手型
  15. 如何制作个人的纯手写电子签名
  16. 低功耗蓝牙BLE之修改广播间隔等参数
  17. MySQL 服务器是什么_什么是 MySQL?
  18. Python怎么识别文字?正确的方法详解
  19. (1146, Table 'django.django_session' doesn't exist)
  20. 【JavaSE】基础语法练习---减肥计划(流程控制)

热门文章

  1. 中山大学计算机在职研究生分数线,中山大学在职研究生的合格分数线不是很高吗...
  2. python豆瓣电影需研究的问题_python爬虫获取豆瓣电影——多线程问题
  3. 超能粒子炮·改 HYSBZ - 4591
  4. 59.java编程思想——创建窗口和程序片 Swing
  5. 数学建模笔记(十三):离散模型(DP、图论)
  6. 刚当上leader,我让组员去开会,他非说有更重要的会
  7. 《gcc五分钟系列》基础部分结束
  8. 算法学习(八)——排序算法汇总
  9. 基础算法——贪心算法(圣诞老人的礼物)
  10. leetcode|经典力扣第一题