Java/Android倒计时(开始,暂停,恢复,停止)
由于要做暂停和恢复,这里我就没有使用Android的CountDownTimer,而是用了Java的Timer。所以,这个方法在java肯定是通用。我也外加了Android独有的Service,有些计时器需要在Activiy关闭的情况下依然在计时,回到Activity时,显示当前的计时状态。
Timer 这个Java的类,具体看Java的API说明,但是要注意一点:
Timer 在cancel后,需要重新new 一次。
首先要给计时器定义三个状态:准备,开始,暂停。
- public static final int PREPARE = 0;
- public static final int START = 1;
- public static final int PASUSE = 2;
1.准备:没有开始计时,最初始状态;
2.开始:已经开始倒计时
3.暂停:已经开始倒计时,而且用户点击了暂停
开始、恢复倒计时,我定义了这个方法:
- private void startTimer(){
- timer = new Timer();
- timerTask = new MyTimerTask();
- timer.scheduleAtFixedRate(timerTask, 0, timer_unit);
- }
timer_unit 就是执行timer 任务的时间,我定义为1秒。MyTimerTask是我定义的一个倒计时计算方法,如下:
- private class MyTimerTask extends TimerTask{
- @Override
- public void run() {
- timer_couting -=timer_unit;
- if(timer_couting==0){
- cancel();
- initTimerStatus();
- }
- mHandler.sendEmptyMessage(1);
- }
- }
timer_couting 是一个变量,记录当前倒计时还剩余多少时间,当剩余时间为0时,倒计时结束,所以cancel结束倒计时。每次倒计一秒通过handler发送到主线程来更新ui提示倒计时信息。
在界面上定义两个按钮,一个开始,一个停止,开始后可以暂停,暂停后可以恢复。
- case R.id.btn_start:
- switch (timerStatus){
- case CountDownTimerUtil.PREPARE:
- startTimer();
- timerStatus = CountDownTimerUtil.START;
- btnStart.setText("PAUSE");
- break;
- case CountDownTimerUtil.START:
- timer.cancel();
- timerStatus = CountDownTimerUtil.PASUSE;
- btnStart.setText("RESUME");
- break;
- case CountDownTimerUtil.PASUSE:
- startTimer();
- timerStatus = CountDownTimerUtil.START;
- btnStart.setText("PAUSE");
- break;
- }
- break;
- case R.id.btn_stop:
- if(timer!=null){
- timer.cancel();
- initTimerStatus();
- mHandler.sendEmptyMessage(1);
- }
对于Android应用中需要用到关闭了Activity后依然在计时,在这里我们需要用Service,定义Service的情况跟上面类同,但是要注意的是这个计时Service是要单例模式,保证每次倒计时进来都是同一个倒计时。还需要定义一些方法来让Activity给这个Service传递操作命令,开始,暂停,恢复,停止。
- public void startCountDown(){
- startTimer();
- timerStatus = CountDownTimerUtil.START;
- }
- public void pauseCountDown(){
- timer.cancel();
- timerStatus = CountDownTimerUtil.PASUSE;
- }
- public void stopCountDown(){
- if(timer!=null){
- timer.cancel();
- initTimerStatus();
- mCountDownTimerListener.onChange();
- }
- }
在Activity里面获取这个Service
- countDownTimerService = CountDownTimerService.getInstance(new MyCountDownLisener()
- ,service_distination_total);
项目源码:https://github.com/arjinmc/Android-CountDownTimer
Java/Android倒计时(开始,暂停,恢复,停止)的更多相关文章
- android倒计时(整理)
android倒计时 用到CountDownTimer Android中文API(143) —— CountDownTimer 前言 本章内容android.os.CountDownTime章节,版本 ...
- 【转】android错误 aapt.exe已停止工作的解决方法
http://www.jb51.net/article/57420.htm 在使用eclipse进行安卓java的编程的时候,有时候我们会遇到这样的问题:那就是无故弹出aapt.exe停止工作的提示, ...
- python-线程的暂停, 恢复, 退出
我们都知道python中可以是threading模块实现多线程, 但是模块并没有提供暂停, 恢复和停止线程的方法, 一旦线程对象调用start方法后, 只能等到对应的方法函数运行完毕. 也就是说一旦s ...
- cocos2d-x 暂停/恢复 与场景相关(SceneGraph类型)的监听器
开发过程中,我们经常会遇到这样的情况:想要让一个Layer中所有的Node对象的事件都停止响应. 在响应用户事件后,又要恢复该Layer的所有事件响应. 如: 用户想要显示一个模式对话框,显示对话框后 ...
- CALayer动画的暂停,恢复,以及结束时候的回调
CALayer动画的暂停,恢复,以及结束时候的回调 源码如下: // // ViewController.m // AnimationLineView // // Created by YouXian ...
- 关于 Java(TM) Platform SE binary 已停止工作 的解决方法
一.问题描述 昨天晚上Myeclipse还用着好好的,今天早上打开工程,只要运行就卡住,大半天弹出个消息窗口:Java(TM) Platform SE binary 已停止工作. 如图 关闭Myecl ...
- Java/Android引用类型及其使用分析
Java/Android中有四种引用类型,分别是: Strong reference - 强引用Soft Reference - 软引用Weak Reference - ...
- Atitti.java android反编译解决方案-----虚拟机方案
Atitti.java android反编译解决方案-----虚拟机方案 哈哈,终极解决方案是虚拟机...c++也可以反编译为汇编代码,但无需担心,因为读懂汇编太麻烦..只要不能拿到c++源码就可.. ...
- Java Android HTTP实现总结
Java Android HTTP实现总结 Http(Hypertext Transfer Protocol)超文本传输协议,是一个基于请求/响应模式的无状态的协议,Http1.1版给出了持续连接的机 ...
随机推荐
- linux cp 命令详解
/home/lee#cp --help 用法:cp [选项]... 来源 目的地 或:cp [选项]... 来源... 目录 或:cp [选项]... --target-directory=目录 来源 ...
- Android短轮询解决方案——CountDownTimer+Handler
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/7657194.html 一:应用场景 在诸如自动售卖机之类的扫码支付场景中,客户端在获得支付二维码或者发出支付请 ...
- Ant脚本简介与基础知识
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6624003.html 一:Ant是什么 Ant相当于Linux环境下的shell脚本,只不过是用xml文档来 ...
- Linq to Entity 求最大小值Max/Min返回null的处理方法
var maxId=db.user.Select(u=>u.CId).DefaultIfEmpty() 如果maxId返回null则maxId.Max()的值为0
- java LimitedThreadPool
此线程池一直增长,直到上限,增长后不收缩(因为池子里面的线程是永生的).这个keepAliveTime参数设置的为Long.MAX_VALUE,所以池子里面的线程几乎不会因为idle而被termina ...
- ps 如何将视频转换成gif?
1.情景展示 视频转gif如何实现? 2.解决方案 通过ps可以实现. 打开ps-->打开视频文件: 功能介绍: 选中图层--> 修改持续时间,可以控制显示的内容: 修改播放速度,可以 ...
- Web网站错误提示页面和默认訪问页面设置
1.asp.net 定制简单的错误处理页面 通常web应用程序在公布后.为了给用户一个友好界面和使用体验,都会在发生错误时跳转至一个自己定义的错误页面,而不是asp.net向用户暴露出来的具体的异常列 ...
- 深入理解JVM(三)——垃圾收集策略具体解释
Java虚拟机的内存模型分为五个部分.各自是:程序计数器.Java虚拟机栈.本地方法栈.堆.方法区. 这五个区域既然是存储空间,那么为了避免Java虚拟机在执行期间内存存满的情况,就必须得有一个垃圾收 ...
- 10个超棒jQuery表单操作代码片段
jQuery绝对是一个伟大的开源javascript类库,是帮助我们快速和高效开发前端应用的利器.可能大家在日常的开发过程中常常会处理表单相关的javascript,在今天这篇代码片段分享文章中,这里 ...
- PHP 反射API说明
2.API概览:class Reflection { }interface Reflector { }class ReflectionException extends Exception { }cl ...