Android 实现定时器的四种方式总结及实现实例
作者:wansho 时间:2023-04-20 15:22:04
Android中实现定时器的四种方式
第一种方式利用Timer和TimerTask
1、继承关系
java.util.Timer
基本方法
schedule
例如:
timer.schedule(task, delay,period);
//delay为long,period为long:从现在起过delay毫秒以后,每隔period毫秒执行一次。
schedule方法有三个参数
第一个参数就是TimerTask类型的对象,我们实现TimerTask的run()方法就是要周期执行的一个任务;
第二个参数有两种类型,第一种是long类型,表示多长时间后开始执行,另一种是Date类型,表示从那个时间后开始执行;
第三个参数就是执行的周期,为long类型。
2、
TimerTask task= new TimerTask() {
@Override
public void run() {
count++;
Log.i("MainActivity",count + "");
}
};
//以下是几种调度task的方法:
//time为Date类型:在指定时间执行一次。
timer.schedule(task, time);
//firstTime为Date类型,period为long,表示从firstTime时刻开始,每隔period毫秒执行一次。
timer.schedule(task, firstTime,period);
//delay 为long类型:从现在起过delay毫秒执行一次。
timer.schedule(task, delay);
//delay为long,period为long:从现在起过delay毫秒以后,每隔period毫秒执行一次。
timer.schedule(task, delay,period);
注意:task应该在onDestory()中取消掉,否则可能发生崩溃
3、用TimerTask定时进行某些操作的APP,即使退出了,TimerTask中依然会运行一会,但是不能长时间运行
第二种方式 使用CountDownTimer
1、Demo
CountDownTimer cdt = new CountDownTimer(10000, 100) {
@Override
public void onTick(long millisUntilFinished) {
tv_hello.setText(millisUntilFinished + "");
}
@Override
public void onFinish() {
}
};
cdt.start();
2、上面的例子是
每隔100毫秒执行onTick中的方法一次
直到执行完10000/100次为止,最后会执行onFinish()中的方法
第三种方式 AlarmManager
demo:
Intent intent2 = newIntent(ReadLogService.this,TestBroadcast.class);
PendingIntent pd =PendingIntent.getBroadcast(getApplicationContext(), 0, intent2,PendingIntent.FLAG_ONE_SHOT);
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
long triggerTime =SystemClock.elapsedRealtime() + 5*1000;
am.set(AlarmManager.ELAPSED_REALTIME,triggerTime, pd);
第四种方式 AlarmManager
handler.sendEmptyMessageDelayed(0, 4000);//启动handler,实现4秒定时循环执行
private Handler handler = new Handler(){
public voidhandleMessage(android.os.Message msg) {
if(isChange){
//逻辑处理
handler.sendEmptyMessageDelayed(0,4000);//4秒后再次执行
}
}
};
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
来源:http://www.cnblogs.com/wansho/p/5104335.html
标签:Android,定时器
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
flutter material widget组件之信息展示组件使用详解
2023-06-22 08:45:35
Java的JDBC中Statement与CallableStatement对象实例
2022-11-14 17:22:08
MyBatis的嵌套查询解析
2023-11-26 16:58:46
c#获取当前年的周数及当前月的天数示例代码
2021-10-04 09:42:19
Java使用Math.random()结合蒙特卡洛方法计算pi值示例
2023-05-10 10:43:13
![](https://img.aspxhome.com/file/2023/6/60606_0s.jpg)
SpringBoot自定义starter实例代码
2021-09-04 14:28:06
![](https://img.aspxhome.com/file/2023/1/71611_0s.jpg)
详解Android使用@hide的API的方法
2023-02-16 07:10:31
springMvc请求的跳转和传值的方法
2023-02-06 17:29:56
Android实现固定屏幕显示的方法
2023-05-23 18:29:07
Android根据不同身份配置APP对应的不同模块方法
2023-09-25 05:22:36
![](https://img.aspxhome.com/file/2023/4/114354_0s.jpg)
详解Spring全局异常处理的三种方式
2023-11-11 15:31:47
理解C#中的枚举(简明易懂)
2023-01-23 01:34:47
![](https://img.aspxhome.com/file/2023/7/122627_0s.png)
Java中对于双属性枚举的使用案例
2023-07-20 15:00:09
Android ADB常用命令总结
2022-05-24 18:07:42
redisson特性及优雅实现示例
2022-02-13 19:51:25
通俗讲解JVM的类加载机制
2023-01-03 03:35:03
![](https://img.aspxhome.com/file/2023/1/119161_0s.png)
详谈Lock与synchronized 的区别
2023-03-26 18:13:14
c# 开机启动项的小例子
2022-11-30 02:16:43
Android中listview和imageview实现条目单选效果
2022-12-05 05:02:31
![](https://img.aspxhome.com/file/2023/0/130360_0s.jpg)
Flutter 构建一个常用的页面框架
2022-10-02 02:54:19
![](https://img.aspxhome.com/file/2023/0/114370_0s.jpg)