关闭

Android中的定时器Timer、AlarmManager、CountDownTimer的使用

3225人阅读 评论(0) 收藏 举报
分类:

1、Timer和TimerTask的使用

java.util.Timer定时器,实际上是个线程,定时调度所拥有的TimerTasks。

(1)创建一个Timer

java.util.Timer timer = new java.util.Timer(true);   
// true 说明这个timer以daemon方式运行(优先级低,   
// 程序结束timer也自动结束),注意,javax.swing   
// 包中也有一个Timer类,如果import中用到swing包,   
// 要注意名字的冲突。 

(2)创建一个TimerTask

TimerTask task = new TimerTask() {   
public void run() {   
... //每次需要执行的代码放到这里面。   
}   
}; 

(3)Timer调度执行TimerTask

//以下是几种调度task的方法:   

timer.schedule(task, time);   
// time为Date类型:在指定时间执行一次。   

timer.schedule(task, firstTime, period);   
// firstTime为Date类型,period为long   
// 从firstTime时刻开始,每隔period毫秒执行一次。   

timer.schedule(task, delay)   
// delay 为long类型:从现在起过delay毫秒执行一次   

timer.schedule(task, delay, period)   
// delay为long,period为long:从现在起过delay毫秒以后,每隔period   
// 毫秒执行一次。

2、AlarmManager(全局定时器/闹钟)

AlarmManager的作用是:在特定的时刻为我们广播一个指定的Intent。简单的说就是我们设定一个时间,然后在该时间到来时,AlarmManager为我们广播一个我们设定的Intent。

AlarmManager提供的方法:

void set(int type, long triggerAtTime, PendingIntent operation) 
设置一个闹钟 

void setRepeating(int type, long triggerAtTime, long interval, PendingIntent operation) 
设置一个会重复的闹钟

void setInexactRepeating(int type, long triggerAtTime, long interval, PendingIntent operation) 
设置一个重复闹钟的不精确版本,它相对而言更节能(power-efficient)一些,因为系统可能会将几个差不多的闹钟合并为一个来执行,减少设备的唤醒次数。

(1)type类型
ELAPSED_REALTIME
在指定的延时过后,发送广播,但不唤醒设备。

ELAPSED_REALTIME_WAKEUP
在指定的演示后,发送广播,并唤醒设备

RTC
在指定的时刻,发送广播,但不唤醒设备

RTC_WAKEUP
在指定的时刻,发送广播,并唤醒设备

(2)内置的几个interval为:
INTERVAL_FIFTEEN_MINUTES
INTERVAL_HALF_HOUR
INTERVAL_HOUR
INTERVAL_HALF_DAY
INTERVAL_DAY
如果你将其设为DAY,那么可能这一天中的所有闹钟都会被合并掉。

void cancel(PendingIntent operation) 
取消一个设置的闹钟 

void setTimeZone(String timeZone) 
设置系统的默认时区。需要android.permission.SET_TIME_ZONE权限 

在指定时长后执行某项操作

//操作:发送一个广播,广播接收后Toast提示定时操作完成
 Intent intent =new Intent(Main.this, alarmreceiver.class);
intent.setAction("short");
PendingIntent sender=
    PendingIntent.getBroadcast(Main.this, 0, intent, 0);

//设定一个五秒后的时间
Calendar calendar=Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 5);

AlarmManager alarm=(AlarmManager)getSystemService(ALARM_SERVICE);
alarm.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender);
//或者以下面方式简化
//alarm.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+5*1000, sender);

Toast.makeText(Main.this, "五秒后alarm开启", Toast.LENGTH_LONG).show();

周期性的执行某项操作

Intent intent =new Intent(Main.this, alarmreceiver.class);
intent.setAction("repeating");
PendingIntent sender=PendingIntent
    .getBroadcast(Main.this, 0, intent, 0);

//开始时间
long firstime=SystemClock.elapsedRealtime();

AlarmManager am=(AlarmManager)getSystemService(ALARM_SERVICE);
  //5秒一个周期,不停的发送广播
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP
        , firstime, 5*1000, sender);

3、CountDownTimer(倒计时计数器)

定时执行在一段时间后停止的倒计时,在倒计时执行过程中会在固定间隔时间得到通知。

构造函数

public CountDownTimer (long millisInFuture, long countDownInterval)

参数

millisInFuture 从开始调用start()到倒计时完成并onFinish()方法被调用的毫秒数。(倒计时时间,单位毫秒)
countDownInterval 接收onTick(long)回调的间隔时间。(单位毫秒)

公共方法
public final void cancel ()
取消倒计时(取消后,再次启动会重新开始倒计时)

public abstract void onFinish ()
倒计时完成时被调用

public abstract void onTick (long millisUntilFinished)
固定间隔被调用
参数 millisUntilFinished 倒计时剩余时间。

public synchronized final CountDownTimer start ()
启动倒计时

new CountdownTimer(30000, 1000) {  
     public void onTick(long millisUntilFinished) {  
         mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);  
     }  
     public void onFinish() {  
         mTextField.setText("done!");  
     }  
 }.start(); 
0
0
查看评论

Android三种实现定时器的方法

方法一:Handler+Thread package com.xunfang.handerDemo; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import androi...
  • yhm2046
  • yhm2046
  • 2012-11-22 18:20
  • 139424

Android实现定时器的几种方法

前言这几天正在看Android官方的开发文档,里面有很多很值得思考的开发建议,有时间的朋友可以去看一下(官方是英文文档,如果看不懂可以通过浏览器插件翻译对比着看,还是很方便的)。其中一篇课程提到了AlarmManager,这个类之前仅仅是了解这是一个闹钟的管理器,如果要是做一些胜过提醒、闹钟之类的软...
  • u011315960
  • u011315960
  • 2016-08-04 18:23
  • 14255

Android中实现定时器的四种方式

第一种方式利用Timer和TimerTask 1、继承关系 java.util.Timer 基本方法 schedule 例如: timer.schedule(task, delay,period);...
  • u014365133
  • u014365133
  • 2017-02-14 13:51
  • 1672

Android 定时任务的多种实现方式

定时任务实现总结在Android中这算是一个常用的功能了,,有兴趣一起来探讨下可以Android消息机制首先来了解一下Android的消息处理机制 即Handlerd的运行机制,handler的运行需要底层的MessageQueue和Looper的支撑。MessageQueue(消息队列),它的...
  • u014492609
  • u014492609
  • 2016-05-22 20:51
  • 44660

Android:定时器Timer的停止和重启实现

17年8月第1篇日志 7月份做了一个项目,利用自定义控件呈现一幅动画,当时使用定时器来控制时间,但是当停止开启时总是出现问题。一直在寻找合理的方法解决这个问题,一直没有找到,最近终于找到了合理的方法来解决这个问题。 大家如何查询有关资料,一定知道timer,timertask取消的方式是采用Ti...
  • ningzhimeng
  • ningzhimeng
  • 2017-07-31 20:56
  • 1811

Android中几种常用的定时器和延时方法

通过实际项目的练习,掌握了几种android基本定时器和延时的用法,这里我想总结一下作为自己的收获,下面列出的是比较简洁的模式,方便简单地在程序中直接调用。 一、三种常用的定时器 1.Handler类的postDelayed方法: Handler mHandler = new H...
  • u011710991
  • u011710991
  • 2015-12-01 18:41
  • 6486

Android 定时器 (每隔N秒执行一次).

1.代码: private int TIME = 1000;  //每隔1s执行一次. Handler handler = new Handler();     handler.postDelayed(runnable, TIME); // 在初始化方法里. ...
  • GXL_1899
  • GXL_1899
  • 2017-05-23 14:34
  • 2228

Android中实现定时器的四种方式

第一种方式 利用Timer和TimerTask 1、继承关系 java.util.Timer 基本方法 schedule 例如:     timer.schedule(task, delay,period);  //delay为lo...
  • u013675234
  • u013675234
  • 2015-11-30 23:55
  • 2898

Android简单计时器

本文利用ContextMenu(上下文菜单),Chronometer实现简单计数器。 Main.xml: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" androi...
  • fwwdn
  • fwwdn
  • 2012-05-09 17:24
  • 43097

Android中定时执行任务的3种实现方法

在Android开发中,定时执行任务的3种实现方法: 一、采用Handler与线程的sleep(long)方法(不建议使用,java的实现方式) 二、采用Handler的postDelayed(Runnable, long)方法(最简单的android实现) 三、采用Handler与tim...
  • u012372365
  • u012372365
  • 2016-07-26 13:07
  • 3116
    关于我
    目前就职于百度
    研究方向:Android,机器学习
    联系方式QQ:2979218500


      欢迎关注微信公众号:DroidMind
      精品内容独家发布平台
      呈现与博客不一样的技术干货
    个人资料
    • 访问:535445次
    • 积分:8469
    • 等级:
    • 排名:第2801名
    • 原创:288篇
    • 转载:48篇
    • 译文:22篇
    • 评论:70条