Android创建定时器的常见方式

举报
liuzhen007 发表于 2021/05/28 06:25:35 2021/05/28
【摘要】 一、利用Timer + TimerTask 就像它的名字一样,一看就知道可以用来做定时器。直接看代码: Timer timer = new Timer();timer.schedule(new TimerTask() { @Override public void run() { //todo what you want }}, 0, 1000); 二、利用Handle...

一、利用Timer + TimerTask

就像它的名字一样,一看就知道可以用来做定时器。直接看代码:


  
  1. Timer timer = new Timer();
  2. timer.schedule(new TimerTask() {
  3. @Override
  4. public void run() {
  5. //todo what you want
  6. }
  7. }, 0, 1000);

二、利用Handler + Runnable

代码举例:


  
  1. private Handler handler = new Handler();
  2. private Runnable runnable = new Runnable() {
  3. @Override
  4. public void run() {
  5. //todo what you want
  6. handler.postDelayed(runnable, 1000);
  7. }
  8. };

这样定义好后,是不会直接运行,需要在合适的地方调用一次如下代码:

 handler.postDelayed(runnable, 1000);//触发定时器
 

三、利用Thread


  
  1. private class MyThread extends Thread {
  2. public boolean stop = false;
  3. public void run() {
  4. while (!stop) {
  5. //todo what you want
  6. try {
  7. Thread.sleep(1000);
  8. } catch (InterruptedException e) {
  9. e.printStackTrace();
  10. }
  11. }
  12. };
  13. };

定好自己的定时线程类,然后启动:


  
  1. MyThread thread = new MyThread();
  2. thread.start();

四、利用AlarmManager

AlarmManager是系统级闹钟服务,可以直接使用。


  
  1. //获取闹钟服务
  2. AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
  3. //todo what you want in the onCreate() of ClockActivity
  4. Intent intent = new Intent(MainActivity.this, ClockActivity.class);
  5. PendingIntent pi = PendingIntent.getActivity(this, 0, intent, 0);
  6. /*
  7. *参数1表示闹钟类型,本例表示在睡眠状态下会唤醒系统并执行提示功能,该状态下闹钟使用绝对时间;
  8. *参数2表示定时器启动时间,本例是现在就开始;
  9. *参数3表示定时器的触发间隔,本例是1秒钟;
  10. *参数4表示定时器的行为,本例是启动系统服务在活动间跳转;
  11. */
  12. alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000, pi);

五、利用CountDownTimer(倒计时器)

就像它的名字一样,是跟咱们一般的定时器反着的。看代码:


  
  1. //参数1:计时总时间,参数2:每次扣除时间数
  2. CountDownTimer cdt = new CountDownTimer(10000, 1000){
  3. @Override
  4. public void onTick(long millisUntilFinished)
  5. {
  6. //todo what you want
  7. }
  8. @Override
  9. public void onFinish() {
  10. }
  11. };
  12. cdt.start();

 

文章来源: liuzhen.blog.csdn.net,作者:Data-Mining,版权归原作者所有,如需转载,请联系作者。

原文链接:liuzhen.blog.csdn.net/article/details/89952464

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200