当前位置: 移动技术网 > IT编程>移动开发>Android > Android TimerTask 的简单应用及注意事项

Android TimerTask 的简单应用及注意事项

2019年07月24日  | 移动技术网IT编程  | 我要评论

bleachcn,血缘难断,杨运忠

android  timertask 的简单应用及注意事项

android应用开发中常常会用到定时器,不可避免的需要用到 timertask 定时器任务这个类

下面简单的一个示例演示了如何使用timertask

这个示例演示了3秒未有触屏事件发生则锁屏(只是设置下文本,意思一下)有触屏事件则解除锁定

public class coltimertaskactivity extends activity {
  /** called when the activity is first created. */
 
 private final string tag = "coltimertaskactivity";
 private final int event_lock_window = 0x100;
 
 private textview textview;
 private handler mhandler;
 private timer mtimer;
 private mytimertask mtimertask;
 
  @override
  public void oncreate(bundle savedinstancestate) {
    super.oncreate(savedinstancestate);
    setcontentview(r.layout.main);
    
    textview = (textview)findviewbyid(r.id.textview);
    
    mhandler = new handler(){
     public void handlemessage(message message){
     log.i(tag, "message what = " + message.what);
     if (message.what == 0x100){
      lockwindow();
     }
     
     }
    };
    
    mtimer = new timer(true);
    
    resumewindow();
    
    startlockwindowtimer();
  }
  
  public boolean ontouchevent(motionevent event)
  {
   // todo auto-generated method stub
   resumewindow();
   startlockwindowtimer();
   
   return super.ontouchevent(event);
  }
  
  public void resumewindow(){
   textview.settext("main window");
 
  }
  
  public void lockwindow(){
   textview.settext("lock window");
  }
  
  public void startlockwindowtimer(){
   if (mtimer != null){
   if (mtimertask != null){
    mtimertask.cancel(); //将原任务从队列中移除
   }
   
   
   mtimertask = new mytimertask(); // 新建一个任务   
   mtimer.schedule(mtimertask, 3000);
   }
  }
  
  class mytimertask extends timertask{
 @override
 public void run() {
  // todo auto-generated method stub
  log.i(tag, "run...");
  message msg = mhandler.obtainmessage(event_lock_window);
  msg.sendtotarget();
 }
   
  }
}

这里需要注意两个问题:

 if (mtimertask != null){
      mtimertask.cancel(); //将原任务从队列中移除
   }

每次放定时任务前,确保之前任务已从定时器队列中移除

 mtimertask = new mytimertask(); // 新建一个任务  

  每次放任务都要新建一个对象,否则出现一下错误:

      error/androidruntime(11761): java.lang.illegalstateexception: timertask is scheduled already

      所以同一个定时器任务只能被放置一次

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网