基础系列 06:Android倒计时一览

Published: 27 Oct 2017 Category: 基础
有下面几种实现方式:
  • Timer和TimerTask(常规实现)
``` new Timer().schedule(new TimerTask() {
	@Override
	public void run() {
	// do some task
	Log.i("TAG","这是普通方式的TimerTask");
	}
},0,3000);
``` 大多数人都会采用这种方式实现定时任务,当退出当前Acticity,则主动将timer取消掉即可.
  • Service中开启线程来实现定时器

    private void serviceTimerTask(){
         Thread mythread =  new Thread(new Runnable() {
         @Override
           public void run() {
                   while (true){
      					 try {
                               Thread.sleep(3000);
                             // do other task
                            } catch (InterruptedException e) {
                              e.printStackTrace();
                            }
                          }
                     }
                   });
                   mythread.start();
           }
    

    该定时器的生命周期和Service的生命周期一样,当Service销毁时,该定时任务结束。当退出该应用时,Service不会立即销毁,定时任务不会立即结束.

  • ScheduledExecutorService去实现

    /**
       * 开启定时任务
       */
      void timerTask() {
          scheduleService = Executors.newSingleThreadScheduledExecutor();
          Runnable runnable = new Runnable() {
    
              @Override
              public void run() {
                  // to do task
                  CLog.i(TAG, "to do task");
              }
    
          };
          scheduleGetScanLists = scheduleService.scheduleAtFixedRate(runnable,
                  0, 5, TimeUnit.SECONDS);
      }
        
      /**
       * 取消定时任务
       */
      void cancelTimerTask() {
          if (scheduleGetScanLists != null) {
              scheduleGetScanLists.cancel(true);
              scheduleService.shutdown();
          }
      }
    
  • 系统的AlarmManager来实现定时任务

参考链接