zoukankan      html  css  js  c++  java
  • Java/Android倒计时(开始,暂停,恢复,停止)

     

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

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

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

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

    1. public static final int PREPARE = 0;  
    2. public static final int START = 1;  
    3. public static final int PASUSE = 2;  

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

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

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

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

    1.   
    2. private void startTimer(){  
    3.     timer = new Timer();  
    4.     timerTask = new MyTimerTask();  
    5.     timer.scheduleAtFixedRate(timerTask, 0, timer_unit);  
    6. }  

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

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

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

    1. case R.id.btn_start:  
    2.       switch (timerStatus){  
    3.           case CountDownTimerUtil.PREPARE:  
    4.               startTimer();  
    5.               timerStatus = CountDownTimerUtil.START;  
    6.               btnStart.setText("PAUSE");  
    7.               break;  
    8.           case CountDownTimerUtil.START:  
    9.               timer.cancel();  
    10.               timerStatus = CountDownTimerUtil.PASUSE;  
    11.               btnStart.setText("RESUME");  
    12.               break;  
    13.           case CountDownTimerUtil.PASUSE:  
    14.               startTimer();  
    15.               timerStatus = CountDownTimerUtil.START;  
    16.               btnStart.setText("PAUSE");  
    17.               break;  
    18.       }  
    19.       break;  
    20.   case R.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.   
    2. public void startCountDown(){  
    3.     startTimer();  
    4.     timerStatus = CountDownTimerUtil.START;  
    5. }  
    6.   
    7.   
    8. public void pauseCountDown(){  
    9.     timer.cancel();  
    10.     timerStatus = CountDownTimerUtil.PASUSE;  
    11. }  
    12.   
    13.   
    14. public void stopCountDown(){  
    15.     if(timer!=null){  
    16.         timer.cancel();  
    17.         initTimerStatus();  
    18.         mCountDownTimerListener.onChange();  
    19.     }  
    20. }  
    在Activity里面获取这个Service
    1. countDownTimerService = CountDownTimerService.getInstance(new MyCountDownLisener()  
    2.                 ,service_distination_total);  

    项目源码:https://github.com/arjinmc/Android-CountDownTimer
     
    看得不爽,点我技术博客:http://blog.csdn.net/arjinmc/article/details/47775995
  • 相关阅读:
    SpringBoot整合WebSocket的客户端和服务端的实现
    Django实现发送邮件
    Python环境搭建
    Hexo+Gitee搭建个人博客
    Chrome浏览器安装离线插件Markdown Here
    TestLink测试用例管理工具使用说明
    【odoo14】【好书学习】odoo 14 Development Cookbook【目录篇】
    【odoo14】【开发侧】权限配置
    【odoo14】【用户侧】权限配置
    【odoo14】【知识点】视图的继承逻辑
  • 原文地址:https://www.cnblogs.com/xgjblog/p/8690805.html
Copyright © 2011-2022 走看看