Java/Android倒计时(开始,暂停,恢复,停止)

摘要:
我也外加了Android独有的Service,有些计时器需要在Activiy关闭的情况下依然在计时,回到Activity时,显示当前的计时状态。每次倒计一秒通过handler发送到主线程来更新ui提示倒计时信息。=null){timer.cancel();initTimerStatus();mHandler.sendEmptyMessage;}对于Android应用中需要用到关闭了Activity后依然在计时,在这里我们需要用Service,定义Service的情况跟上面类同,但是要注意的是这个计时Service是要单例模式,保证每次倒计时进来都是同一个倒计时。还需要定义一些方法来让Activity给这个Service传递操作命令,开始,暂停,恢复,停止。

由于要做暂停和恢复,这里我就没有使用Android的CountDownTimer,而是用了Java的Timer。所以,这个方法在java肯定是通用。我也外加了Android独有的Service,有些计时器需要在Activiy关闭的情况下依然在计时,回到Activity时,显示当前的计时状态。

Timer 这个Java的类,具体看Java的API说明,但是要注意一点:

Timer 在cancel后,需要重新new 一次。

首先要给计时器定义三个状态:准备,开始,暂停。

  1. publicstaticfinalintPREPARE=0;
  2. publicstaticfinalintSTART=1;
  3. publicstaticfinalintPASUSE=2;

1.准备:没有开始计时,最初始状态;

2.开始:已经开始倒计时

3.暂停:已经开始倒计时,而且用户点击了暂停

开始、恢复倒计时,我定义了这个方法:

  1. privatevoidstartTimer(){
  2. timer=newTimer();
  3. timerTask=newMyTimerTask();
  4. timer.scheduleAtFixedRate(timerTask,0,timer_unit);
  5. }

timer_unit 就是执行timer 任务的时间,我定义为1秒。MyTimerTask是我定义的一个倒计时计算方法,如下:

  1. privateclassMyTimerTaskextendsTimerTask{
  2. @Override
  3. publicvoidrun(){
  4. timer_couting-=timer_unit;
  5. if(timer_couting==0){
  6. cancel();
  7. initTimerStatus();
  8. }
  9. mHandler.sendEmptyMessage(1);
  10. }
  11. }
timer_couting是一个变量,记录当前倒计时还剩余多少时间,当剩余时间为0时,倒计时结束,所以cancel结束倒计时。每次倒计一秒通过handler发送到主线程来更新ui提示倒计时信息。

在界面上定义两个按钮,一个开始,一个停止,开始后可以暂停,暂停后可以恢复。

  1. caseR.id.btn_start:
  2. switch(timerStatus){
  3. caseCountDownTimerUtil.PREPARE:
  4. startTimer();
  5. timerStatus=CountDownTimerUtil.START;
  6. btnStart.setText("PAUSE");
  7. break;
  8. caseCountDownTimerUtil.START:
  9. timer.cancel();
  10. timerStatus=CountDownTimerUtil.PASUSE;
  11. btnStart.setText("RESUME");
  12. break;
  13. caseCountDownTimerUtil.PASUSE:
  14. startTimer();
  15. timerStatus=CountDownTimerUtil.START;
  16. btnStart.setText("PAUSE");
  17. break;
  18. }
  19. break;
  20. caseR.id.btn_stop:
  21. if(timer!=null){
  22. timer.cancel();
  23. initTimerStatus();
  24. mHandler.sendEmptyMessage(1);
  25. }

对于Android应用中需要用到关闭了Activity后依然在计时,在这里我们需要用Service,定义Service的情况跟上面类同,但是要注意的是这个计时Service是要单例模式,保证每次倒计时进来都是同一个倒计时。还需要定义一些方法来让Activity给这个Service传递操作命令,开始,暂停,恢复,停止。
  1. publicvoidstartCountDown(){
  2. startTimer();
  3. timerStatus=CountDownTimerUtil.START;
  4. }
  5. publicvoidpauseCountDown(){
  6. timer.cancel();
  7. timerStatus=CountDownTimerUtil.PASUSE;
  8. }
  9. publicvoidstopCountDown(){
  10. if(timer!=null){
  11. timer.cancel();
  12. initTimerStatus();
  13. mCountDownTimerListener.onChange();
  14. }
  15. }
在Activity里面获取这个Service
  1. countDownTimerService=CountDownTimerService.getInstance(newMyCountDownLisener()
  2. ,service_distination_total);

项目源码:https://github.com/arjinmc/Android-CountDownTimer
看得不爽,点我技术博客:http://blog.csdn.net/arjinmc/article/details/47775995

免责声明:文章转载自《Java/Android倒计时(开始,暂停,恢复,停止)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C#DataGridView控件60招(一)Java WebService(实战) 简单实例下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

离线更新VSAN HCL数据库

此运行状况检查验证用于HCL检查的VMware兼容性指南数据库是否是最新的。这些VCG检查不是根据VMware网站上的HCL执行的。健康功能的初始版本在发布时提供了最新HCL数据库的副本。VMware为这些驱动程序添加了认证。您可以看到HCL数据库的最后更新日期。如果您的环境允许vCenter Server连接到Internet,则可以通过常规网络访问最新版...

海思MPP视频处理平台流程简介

海思MPP视频处理平台流程介绍海思芯片系统概述首先,让我们了解海思芯片SOC。下图是hi3519A芯片设计图。图1是hi3519AV100芯片设计图。芯片设计图有助于我们全面了解海思的图像处理。从上图中,我们可以看到许多控制芯片集成在芯片SOC中,例如用于深度学习的NNIE硬核、IVE硬核、视频编码和解码单元H265/H264Codec以及图像处理单元ISP...

H3C 12508 收集诊断信息

案例:H3C12508单板卡出现remove状态,需要配合研发收集诊断信息。)总体:12500交换机返回三种文件----故障时诊断信息,主备单板的日志文件,主备单板的诊断日志操作步骤:一、故障时诊断信息:disdiagnostic-informationdiag收集必须在问题出现的时候,单板重起之前执行。在save时请选择Y保存到CF卡方式。一般情况下,此命...

js学习-es6实现枚举

最近,我大部分时间都在写dart,突然使用了js。我发现js不能直接声明枚举。目录枚举功能对象冻结()符号实现反映了不可更改值的唯一性。请注意,枚举特性枚举值不能重复,也不能修改。Switchcase可以直接判断对象。冻结()对象。方法可以冻结对象。无法更改实现constEnumSex=Object。冷冻枚举性别。人=1;安慰日志;//符号(男性)表示值co...

Java 实体类转json对象,属性名转key后首字母强制被转成小写的解决方案

  2.原因分析我们知道在Java规范中,实体类的属性名的命名规范需要遵循首字母小写的驼峰命名法,既是规范也是约束也是牢笼。如果不喜欢这种实现方式,还可以迭代json取值,将key的首字母转大写,也是可以哒。...

electron用默认浏览器打开链接的3种实现方式

在使用Electron开发桌面程序的过程中,我们可能经常需要使Electron程序中包含的链接在单击后直接调用系统的默认浏览器打开。仔细阅读文档后,我们都知道它的核心原理是调用系统的默认浏览器,通过Electron shell模块中的openExternal方法打开链接。然而,它的实现有不同的方法,彻底接管和选择性接管。介绍第3章中的有效方法。以上三种方法都...