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

Android计时器和倒计时的更多相关文章

  1. android 计时器,倒计时

    自己定义CountDownTimer /** * 计时器 * @author Administrator * */ class TimeCount extends CountDownTimer{ pu ...

  2. Android使用CountDownTimer倒计时

    1.布局文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android ...

  3. 拓展 Android 原生 CountDownTimer 倒计时

    拓展 Android 原生 CountDownTimer 倒计时 [TOC] CountDownTimer 在系统的CountDownTimer上进行的修改,主要是拓展了功能,当然也保留了系统默认的模 ...

  4. Android计时器TimerTask,Timer,Handler

    Android计时器TimerTask,Timer,若要在TimerTask中更新主线程UI,鉴于Android编程模型不允许在非主线程中更新主线程UI,因此需要结合Android的Handler实现 ...

  5. Chronometer控件实现的Android计时器

    本文为大家演示了如何使用Chronometer控件实现Android计时器的实例. 先贴上最终的实现效果图: Android计时器实现思路 使用Chronometer控件实现计器的操作.通过设置set ...

  6. Android 获取验证码倒计时实现

    Android 获取验证码倒计时实现 2017年10月24日 09:55:41 FBY展菲 阅读数:2002    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.cs ...

  7. Android 在线订单倒计时设计

        接到一个需求,用户下单后,商店这边需要显示在线订单列表,订单十分钟内有效.于是需要设计倒计时,显示每个订单剩余处理时间.       倒计时剩余时间: 订单创建时间 + 10分钟  - 系统当 ...

  8. Android中实现倒计时

    1.需求 弹出提示的dialog,实现倒计时,结束后关闭dialog 2.dialog界面布局 <?xml version="1.0" encoding="utf- ...

  9. [Android Pro] CountDownTimer倒计时

    定时执行在一段时候后停止的倒计时,在倒计时执行过程中会在固定间隔时间得到通知(译者:触发onTick方法),下面的例子显示在一个文本框中显示一个30s倒计时: new CountdownTimer(3 ...

随机推荐

  1. react学习笔记(一)

    React的介绍: React来自于Facebook公司的开源项目 React 可以开发单页面应用 spa(单页面应用) react 组件化模块化 开发模式 React通过对DOM的模拟(虚拟dom) ...

  2. sql server与C#中的字符串相等等效写法

    sql server两个字段相等判断默认不区分大小写,并且字符串进行Unicode规范化处理. 等效c#中的相等为s=="字符".ToLower().Normalize(Syste ...

  3. MySQL表中的数据类型

    数据类型:在表中数据类型主要是限制字段必须以什么样的数据类型传值. 一 整型 整数类型:TINYINT SMALLINT MEDIUMINT INT BIGINT总共有五种,name我们一般用到的也就 ...

  4. 获取图片src

    用jquery获取图片src(不知道为什么总是undefined): $('img').eq(i).src; $('img').eq(i).attr('src'); //上面两种都是获取不到,不知道为 ...

  5. First C++

    第一天接触C++,根据老师的作业写了两行代码...保存到Github了. https://github.com/BlackDn 首先是认识到自己的一些小错误,如打代码的时候会忘记这一行最后加“:”.可 ...

  6. uva-10391-枚举

    题意:对于输入的字符串,判断是否存在一个单词a=b+c 俩种方法,枚举每一个单词进行拼接,复杂度是n*n 枚举每一个单词,对单词进行substr,判断substr出来的是不在map里面 #includ ...

  7. MonGoDB 常见操作, 设置管理员和用户登入

    [ 启动客户端 => ./bin/mongo --host 192.168.200.100 ] 1: 查看所有已经创建的数据库  =>  show dbs   2: 切换或者创建数据库   ...

  8. ajax二次封装之异步加载

    ajax二次封装之异步加载 ajax异步加载会导致在数据未加载回来就读取数据,然后出现数据为空的报错.在ajax封装时,将ajax直接改为同步,虽然可以解决报错,但是会导致页面渲染被阻塞,接口反应时间 ...

  9. node.js定时任务 node-schedule

    先安装 node-schedule npm install node-schedule //1:确定时间 //例如:2014年2月14日,15:40执行 var schedule = require( ...

  10. VC中链接错误,提示string重定义

    VC链接错误,说是string已经有了实现了,只要 rebuild 一下好了. Linking...LINK : warning LNK4075: ignoring '/EDITANDCONTINUE ...