文档章节

Android计时器和倒计时

拼一把
 拼一把
发布于 2015/10/06 16:45
字数 620
阅读 67
收藏 0


Android计时器和倒计时

计时器
两个核心类 Timer 和 TimerTask
 
1) Timer核心方法
 
Java代码  
//Schedules the specified task for execution after the specified delay.  
void schedule(TimerTask task, long delay)  
 
//Schedules the specified task for repeated fixed-delay execution, beginning after the specified delay.  
void schedule(TimerTask task, long delay, long period)  
 
 
第一个方法只执行一次;
第二个方式每隔period执行一次,delay表示每次执行的延时时间,其实主要表现在第一次的延时效果,比如delay设置为0,那么立马执行task内容,如果设置为1000,那么第一次执行task会有一秒的延时效果。
 
2) TimerTask用于继承(或者直接定义并初始化匿名类),并重写run方法,定义自己的业务逻辑。
 
3) 手动结束定时器,
Timer和TimerTask都有cancel方法,而且最好同时调用;
如果已经cancel,下次必须创建新的Timer才能schedule。
 
4) 如果你在当前的activity中schedule了一个task,但是没有等到task结束,就按Back键finish了当前的activity,Timer和TimerTask并不会自动cancel或者销毁,它还会在后台运行,此时如果你在task的某个阶段要调起一个控件(比如AlertDialog),而该控制依赖被销毁的activity,那么将会引发crash。
 
5) 例如对进度条实现每一秒递增的效果(主要代码)
Java代码  收藏代码
//总时长  
private static final long TOTAL_QUERY_MINUTES = 50;  
//比如每5秒去查询数据库  
private static final long QUERY_INTERVAL = 5 *1000;  
 
private static final int TIMER_SCHEDULE_CODE = 1;  
 
int timePassed=0;  
 
QueryTimerTask queryTask;  
 
private Timer timer;  
 
//显示定时器的效果  
ProgressBar statusBar;  
 
private Handler mHandler= new Handler(new Handler.Callback() {  
 
    @Override  
    public boolean handleMessage(Message msg) {  
        switch (msg.what) {  
              
            case TIMER_SCHEDULE_CODE:  
                statusBar.setProgress(timePassed);  
 
                //Log.w(TAG, "timePassed : " + timePassed + " -- TOTAL_QUERY_MINUTES : " + TOTAL_QUERY_MINUTES);  
                if (timePassed>=TOTAL_QUERY_MINUTES){  
                    if (timer != null)  
                        timer.cancel();  
 
                    if (queryTask != null)  
                        queryTask.cancel();  
 
 
                    new AlertDialog.Builder(YourActivity.this).  
                            setTitle("超时通知").setMessage("已超时,是否继续等待?")  
                        .setPositiveButton("继续等待", new DialogInterface.OnClickListener() {  
                            public void onClick(DialogInterface dialog, int which) {  
                                reSchedule();  
                            }  
                        })  
                        .setNegativeButton("取消任务", new DialogInterface.OnClickListener() {  
                            public void onClick(DialogInterface dialog, int which) {  
                                //cancelTask();  
                            }  
                        }).show();  
                  
                break;  
              
            //....  
        }  
 
        return true;  
    }  
});  
 
void reSchedule() {  
    timePassed = 0;  
 
    if (timer != null) {  
        timer.cancel();  
    }  
 
    if (queryTask != null) {  
        queryTask.cancel();  
    }  
 
    timer = new Timer();  
    queryTask = new QueryTimerTask();  
    //每一秒执行一次,第一次有延时一秒的效果  
    timer.schedule(queryTask, 1000, 1000);  
}  
 
//自定义task  
class QueryTimerTask extends TimerTask {  
    @Override  
    public void run() {  
 
        //比如每过QUERY_INTERVAL去查询信息  
        if ((timePassed * 1000) % QUERY_INTERVAL == 0) {  
            //query();  
        }  
 
        timePassed++;  
 
        //通知handler去改变statusBar  
        Message message = mHandler.obtainMessage();  
        message.what = TIMER_SCHEDULE_CODE;  
        mHandler.sendMessage(message);  
    }  
}  
 
 2. 倒计时
其实也可以用上面的方法实现,
安卓额外提供了CountdownTimer类,以后再补充
文章来源:http://itlanbao.com/preview.aspx#1,0

© 著作权归作者所有

拼一把
粉丝 2
博文 53
码字总数 26406
作品 0
海淀
私信 提问
Chronometer和CountDownTimer计时器

Android小知识10则(上) Android小知识10则(下) Android用5种方式实现自定义计时器, 哪种才是你的菜? github传送门 目录 前言 Chronometer的使用 CountDownTimer的使用 最后 前言 mTimer.set...

Sorrower丶
2018/08/14
0
0
Android Timer计时器详解

直接上代码,解释看注释,一个火箭发射倒计时的例子 main.xml [html] <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" ......

yumingxinli
2013/03/08
1K
1
Android 倒计时工具CountDownTimer的使用

一、用法详解 在Android开发中,有时需要使用倒计时功能,在Android系统中提供了一个倒计时的抽象类来辅助倒计时行为。 这个类有点缺陷,就是不能暂停后再次接着继续使用,为此,需要自定义一...

IamOkay
2014/11/23
208
0
android倒计时功能的实现(CountDownTimer)

android倒计时功能的实现(CountDownTimer) 分类: android小例子2011-11-06 23:182550人阅读评论(4)收藏举报 在逛论坛的时候,看到一个网友提问,说到了CountDownTimer这个类,从名字上面大...

冯京宝
2012/06/14
511
0
Android控件之Chronometer(定时器)

Chronometer是一个简单的定时器,你可以给它一个开始时间,并以此定时,或者如果你不给它一个开始时间,它将会使用你的时间通话开始。默认情况下它会显示在当前定时器的值的形式“分:秒”或...

冯京宝
2012/08/29
142
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
2.1K
14
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
38
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
40
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
61
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
21
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部