Android Timer定时器
2013-03-19 19:57
239 查看
Android Timer定时器
知识点概述:
1. 计时器Chronometer
2. 定时器Timer
3. 全局定时器AlarmManager
知识点详述:
1. 计时器Chronometer
用于计时的组件,是TextView的子类,以1秒的时间间隔进行计时,并显示计时结果.
Chronometer类方法介绍:
Start(); //开始计时
Stop(); //停止计时
setBase(); //设置开始计时的基准时间,单位为毫秒,若取当前时刻,可用SystemClock.elapsedRealtime()获取
setFormat(); //设置显示计时信息内容,用”%s”表示计时信息
注:可以对 Chronometer注册OnChronometerTickListener监听,然后通过其onChronometer事件方法来捕捉计时动作.该方法1秒调用一次.
2. 定时器Timer
在Android平台中需要反复按周期执行的功能可以使用Java上自带的TimerTask类来实现,TimerTask相对于Thread来说消耗资源更低。需要引入java.util.Timer 和 java.util.TimerTask.
Timer类通过schedule方法设置执行方式和重复执行的时间间隔. Schedule方法的第一个参数是TimerTask,TimeTask类实现了Runnable接口,即Timer实际上是在线程中执行代码,在run方法中不能更新UI.
3. 全局定时器AlarmManager
AlarmManager的使用机制称为全局定时器。其实它的作用和Timer有点相似。都有两种相似的用法:(1)在指定时长后执行某项操作(2)周期性的执行某项操作
使用的步骤:
l 获取管理器。AlarmManager alarmManager = this.getSystemService(ALARM_SERVICE);
l 通过AlarmManager的set和setRepeating方法定时。当需要取消时可以通过cancel()方法取消定时。
alarmManager.setRepeating(AlarmManager.RTC, 0, 5000, pendingIntentActivity);
在set和setRepeating方法中,第一个参数type代表定时模式,这里的定时模式主要有以下几种。
ELAPSED_REALTIME //当系统进入睡眠状态时,这种类型的闹铃不会唤醒系统。直到系统下次被唤醒才传递它,该闹铃所用的时间是相对时间,是从系统启动后开始计时的,包括睡眠时间,可以通过调用SystemClock.elapsedRealtime()获得。系统值是3
ELAPSED_REALTIME_WAKEUP //能唤醒系统,用法同ELAPSED_REALTIME,系统值是2
RTC //当系统进入睡眠状态时,这种类型的闹铃不会唤醒系统。直到系统下次被唤醒才传递它,该闹铃所用的时间是绝对时间,所用时间是UTC时间,可以通过调用 System.currentTimeMillis()获得。系统值是1
RTC_WAKEUP //能唤醒系统,用法同RTC类型,系统值为 0
注: 它大致分为两种类型 一种是相对时间 一种是绝对时间.所以,根据使用的类型不同 triggerAtTime设置也有所不同
如果使用ELAPSED_REALTIME_WAKEUP类型 应该调用SystemClock.elapsedRealtime()获取相对时间在加上你设定的延迟时间
alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime()+5000, pendingIntent);
如果使用RTC_WAKEUP类型 应该调用System.currentTimeMillis()获取从1970.1.1号以来的时间在加上你设定的延迟时间
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+5000, pendingIntent);
setRepeating(int type, long triggerAtTime, long interval, PendingIntent operation);
参数一:type表示定时模式
参数二:triggerAtTime表示执行延迟时间(第一次启动定时任务的时间),单位是毫秒
参数三:interval表示执行的时间间隔,单位是毫秒
参数四:operation是一个PendingIntent对象,表示到时间后要执行的操作.
补充:
Android开发过程中为什么要使用线程?
我们创建的Service、Activity以及Broadcast均是一个主线程处理,这里我们可以理解为UI线程。但是在操作一些耗时操作时,比如I/O读写的大文件读写,数据库操作以及网络下载需要很长时间,为了不阻塞用户界面,出现ANR的响应提示窗口,这个时候我们可以考虑使用Thread线程来解决。
1. 对于线程中的刷新一个View为基类的界面,可以使用postInvalidate()方法在线程中来处理, postInvalidateDelayed(long delayMilliseconds)方法表示延迟执行,参数为毫秒.
2. 也通过一个Handler来刷新View,可以在一个线程的run方法中调用handler对象的 post或sendMessage方法来实现,Android程序内部维护着一个消息队列,会轮训处理这些。
3. Looper又是什么呢? 其实Android中每一个Thread都跟着一个Looper,Looper可以帮助Thread维护一个消息队列,
4. Message 在Android是什么呢? 在线程中使用Handler对象的sendEmptyMessage或sendMessage方法来传递一个Bundle对象到Handler处理器。对于Handler类提供了重写方法handleMessage(Message msg) 来判断,通过msg.what来区分每条信息。进而更新UI线程中的内容实现控件的刷新操作。
总结: handler主要用于更新UI.
用法一: handler使用Message
1.定义一个Handler
2.重写消息处理函数
3.发送消息
用法二: 利用handler.post()更新UI
1.创建一个Handler
2.调用Handler.post(Runnable r)方法
3.Runnable运行在UI所在线程,所以可以直接调用View.invalidate()
用法三: 在新线程里更新UI,可以直接使用postInvalidate()
知识点概述:
1. 计时器Chronometer
2. 定时器Timer
3. 全局定时器AlarmManager
知识点详述:
1. 计时器Chronometer
用于计时的组件,是TextView的子类,以1秒的时间间隔进行计时,并显示计时结果.
Chronometer类方法介绍:
Start(); //开始计时
Stop(); //停止计时
setBase(); //设置开始计时的基准时间,单位为毫秒,若取当前时刻,可用SystemClock.elapsedRealtime()获取
setFormat(); //设置显示计时信息内容,用”%s”表示计时信息
注:可以对 Chronometer注册OnChronometerTickListener监听,然后通过其onChronometer事件方法来捕捉计时动作.该方法1秒调用一次.
2. 定时器Timer
在Android平台中需要反复按周期执行的功能可以使用Java上自带的TimerTask类来实现,TimerTask相对于Thread来说消耗资源更低。需要引入java.util.Timer 和 java.util.TimerTask.
Timer类通过schedule方法设置执行方式和重复执行的时间间隔. Schedule方法的第一个参数是TimerTask,TimeTask类实现了Runnable接口,即Timer实际上是在线程中执行代码,在run方法中不能更新UI.
3. 全局定时器AlarmManager
AlarmManager的使用机制称为全局定时器。其实它的作用和Timer有点相似。都有两种相似的用法:(1)在指定时长后执行某项操作(2)周期性的执行某项操作
使用的步骤:
l 获取管理器。AlarmManager alarmManager = this.getSystemService(ALARM_SERVICE);
l 通过AlarmManager的set和setRepeating方法定时。当需要取消时可以通过cancel()方法取消定时。
alarmManager.setRepeating(AlarmManager.RTC, 0, 5000, pendingIntentActivity);
在set和setRepeating方法中,第一个参数type代表定时模式,这里的定时模式主要有以下几种。
ELAPSED_REALTIME //当系统进入睡眠状态时,这种类型的闹铃不会唤醒系统。直到系统下次被唤醒才传递它,该闹铃所用的时间是相对时间,是从系统启动后开始计时的,包括睡眠时间,可以通过调用SystemClock.elapsedRealtime()获得。系统值是3
ELAPSED_REALTIME_WAKEUP //能唤醒系统,用法同ELAPSED_REALTIME,系统值是2
RTC //当系统进入睡眠状态时,这种类型的闹铃不会唤醒系统。直到系统下次被唤醒才传递它,该闹铃所用的时间是绝对时间,所用时间是UTC时间,可以通过调用 System.currentTimeMillis()获得。系统值是1
RTC_WAKEUP //能唤醒系统,用法同RTC类型,系统值为 0
注: 它大致分为两种类型 一种是相对时间 一种是绝对时间.所以,根据使用的类型不同 triggerAtTime设置也有所不同
如果使用ELAPSED_REALTIME_WAKEUP类型 应该调用SystemClock.elapsedRealtime()获取相对时间在加上你设定的延迟时间
alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime()+5000, pendingIntent);
如果使用RTC_WAKEUP类型 应该调用System.currentTimeMillis()获取从1970.1.1号以来的时间在加上你设定的延迟时间
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+5000, pendingIntent);
setRepeating(int type, long triggerAtTime, long interval, PendingIntent operation);
参数一:type表示定时模式
参数二:triggerAtTime表示执行延迟时间(第一次启动定时任务的时间),单位是毫秒
参数三:interval表示执行的时间间隔,单位是毫秒
参数四:operation是一个PendingIntent对象,表示到时间后要执行的操作.
补充:
Android开发过程中为什么要使用线程?
我们创建的Service、Activity以及Broadcast均是一个主线程处理,这里我们可以理解为UI线程。但是在操作一些耗时操作时,比如I/O读写的大文件读写,数据库操作以及网络下载需要很长时间,为了不阻塞用户界面,出现ANR的响应提示窗口,这个时候我们可以考虑使用Thread线程来解决。
1. 对于线程中的刷新一个View为基类的界面,可以使用postInvalidate()方法在线程中来处理, postInvalidateDelayed(long delayMilliseconds)方法表示延迟执行,参数为毫秒.
2. 也通过一个Handler来刷新View,可以在一个线程的run方法中调用handler对象的 post或sendMessage方法来实现,Android程序内部维护着一个消息队列,会轮训处理这些。
3. Looper又是什么呢? 其实Android中每一个Thread都跟着一个Looper,Looper可以帮助Thread维护一个消息队列,
4. Message 在Android是什么呢? 在线程中使用Handler对象的sendEmptyMessage或sendMessage方法来传递一个Bundle对象到Handler处理器。对于Handler类提供了重写方法handleMessage(Message msg) 来判断,通过msg.what来区分每条信息。进而更新UI线程中的内容实现控件的刷新操作。
总结: handler主要用于更新UI.
用法一: handler使用Message
1.定义一个Handler
2.重写消息处理函数
3.发送消息
用法二: 利用handler.post()更新UI
1.创建一个Handler
2.调用Handler.post(Runnable r)方法
3.Runnable运行在UI所在线程,所以可以直接调用View.invalidate()
用法三: 在新线程里更新UI,可以直接使用postInvalidate()
相关文章推荐
- Android 谨慎使用Timer定时器
- Android -- 视频音频多媒体播放,在线播放, MediaPlayer, SurfaceView, SoundPool, Timer定时器使用
- Android:用定时器 timer 刷新界面
- Android定时器Timer
- android 定时器 Timer 使用 及其遇到的问题
- Android中定时器Timer和TimerTask的启动,停止,暂停,继续等操作实例
- Android中定时器Timer和TimerTask的启动,停止,暂停,继续等操作实例
- Android程序中使用定时器Timer
- android 中定时器Timer 和AlarmManager 的区别
- android 定时器 timer简单例子
- Timer---Android 定时器的三种实现
- Android:用定时器刷 timer 新界面
- Android关于定时器Timer的定义及用法
- Android销毁线程的方式,Timer(定时器)的销毁
- Android Timer 定时器 与handler的配合
- Android Timer定时器
- android Timer 定时器 更新UI
- android Timer(定时器) Handler
- Android学习指南之三十四:Android定时器Timer的使用
- Android的schedule、AlarmService、Timer定时器机制