欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2023-11-04 17:35:04
android  timertask 的简单应用及注意事项 android应用开发中常常会用到定时器,不可避免的需要用到 timertask 定时器任务这个类...

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

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

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