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

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


      Timer timer = new Timer();
      timer.schedule(new TimerTask() {
      @Override
      public void run() {
      //todo what you want
       }
      }, 0, 1000);
  
 

二、利用Handler + Runnable

代码举例:


      private Handler handler = new Handler();
      private Runnable runnable = new Runnable() {
      @Override
      public void run() {
      //todo what you want
       handler.postDelayed(runnable, 1000);
       }
      };
  
 

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

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

三、利用Thread


      private class MyThread extends Thread {
      public boolean stop = false;
      public void run() {
      while (!stop) {
      //todo what you want
      try {
       Thread.sleep(1000);
       } catch (InterruptedException e) {
       e.printStackTrace();
       }
       }
       };
      };
  
 

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


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

四、利用AlarmManager

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


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

五、利用CountDownTimer(倒计时器)

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


      //参数1:计时总时间,参数2:每次扣除时间数 
      CountDownTimer cdt = new CountDownTimer(10000, 1000){
      @Override
      public void onTick(long millisUntilFinished)
       {
      //todo what you want 
       }
      @Override
      public void onFinish() {
       }
      };
      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个月内不可修改。