[转帖]Android的计时器和倒计时器_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2161 | 回复: 0   主题: [转帖]Android的计时器和倒计时器        下一篇 
huiming.xu
注册用户
等级:下士
经验:171
发帖:6
精华:0
注册:1970-1-1
状态:离线
发送短消息息给huiming.xu 加好友    发送短消息息给huiming.xu 发消息
发表于: IP:您无权察看 2015-10-9 9:14:49 | [全部帖] [楼主帖] 楼主


计时器
两个核心类 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




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论