关闭

android TimerTask 的简单应用,以及java.lang.IllegalStateException: TimerTask is scheduled already错误的解决方法

标签: androidTimerTaskscheduled already
831人阅读 评论(0) 收藏 举报
分类:

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
      所以同一个定时器任务只能被放置一次

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Android中定时器Timer和TimerTask的启动,停止,暂停,继续等操作实例

下面是一个在Android中使用定时器Timer和TimerTask的启动,停止,暂停,继续等操作的demo。 需要注意的问题主要有两点: 1、Timer和TimerTask在调用cancel()取消后不能再执行 schedule语句,否则提示出错,提示如下: D/AndroidRuntime...
  • dj0379
  • dj0379
  • 2016-03-13 14:44
  • 21240

Android在后台线程和timertask分别实现定期更新时间

 简述: 这是一类定时功能的原型,用来在后台线程中运行一些定时的服务,比如定时修改时间 知识点: 1. Android多线程的消息通信 2. Java中时间的获取,以及String的格式化 3. Android PostDelay 的定期的实现 设计: 开一个...
  • lanhuzi9999
  • lanhuzi9999
  • 2014-07-11 00:59
  • 6564

Android 定时器的实现方式(TimerTask、Handler)及 Handler使用解析

一、Handler的定义:主要接受子线程发送的数据, 并用此数据配合主线程更新UI。对于线程的控制,使用Handler可以对运行在不同线程中的多个任务进行排队,并使用Message和Runnable对象安排这些任务。在javadoc中,对Handler是这样解释的:Handler可以发送和处理消息对...
  • a78270528
  • a78270528
  • 2015-10-27 15:19
  • 11150

TimerTask()中调用TextView.setText报错原因(非UI线程中 不能访问UI组件)

TimerTask()中调用TextView.setText报错原因 今天写了个程序子模块大体意思是在定时器中产生数据赋给TextView显示,结果程序在调用TextView.setText()时便会报错,程序停止运行 程序如下 task = new TimerTask() { pub...
  • zhangjikuan
  • zhangjikuan
  • 2014-03-18 21:45
  • 1145

Android开发之多线程的操作方式Thread,TimerTask,AsyncTask

Android游戏开发之多线程的操作方式 雨松MOMO原创文章如转载,请注明:转载至我的独立域名博客雨松MOMO程序研究院,原文地址:http://www.xuanyusong.com/archives/344 游戏开发与软件开发多线程的重...
  • u011470899
  • u011470899
  • 2013-08-22 10:35
  • 1483

传统定时器技术 Timer and TimerTask

本文为张孝祥java并发课程的学习笔记。 java.util.Timer定时器,实际上是个线程,定时调度所拥有的TimerTasks。 一个TimerTask实际上就是一个拥有run方法的类,需要定时执行的代码放到run方法体内,TimerTask一般是以匿名类的方式创建。 我们看看看Timer...
  • dlf123321
  • dlf123321
  • 2015-01-15 15:29
  • 905

Java并发编程:Timer和TimerTask

下面内容转载自:   http://blog.csdn.net/xieyuooo/article/details/8607220   其实就Timer来讲就是一个调度器,而TimerTask呢只是一个实现了run方法的一个类,而具体的TimerTask需要由你自己来实现,例如这样: ...
  • samjustin1
  • samjustin1
  • 2016-08-18 10:41
  • 496

Timer和TimerTask与线程的关系

1. Timer是一个定时器,它可以根据指定的时间,指定的执行周期来执行固定的任务TimerTask,例子如下: Timer与线程的关系,在Timer源代码中可现如下代码: 1. 以下为Timer的默认构造方法,起调用了自身的一个有参构造函数: 2.有参构造函数代码...
  • kouwoo
  • kouwoo
  • 2015-11-06 10:25
  • 2630

Android Timer 用法以及更新UI时的技巧

Timers主要是用来在后台运行一些任务。可以把Timer设置为守护线程。当调用cancel时所有已经安排的任务都没会被取消。        Timer中的任务是依次执行的,如果一个任务花很长时间才执行完,那么它就可能影响下一个任务的开始执行的...
  • dxpqxb
  • dxpqxb
  • 2013-03-11 15:35
  • 2287

spring中集成TimerTask执行定时任务 中配置文件的配置

在spring的bean配置文件中配置,当系统加载该文件时,配置的定时器将自动启动,同时被spring管理。 Spring对Timer的支持的核心是由ScheduledTimerTask和TimerFactoryBean类组成的。 ScheduledTimerTask类是对TimerTask的...
  • wangyafengx
  • wangyafengx
  • 2015-06-12 18:25
  • 1220
    个人资料
    • 访问:213738次
    • 积分:2692
    • 等级:
    • 排名:第15544名
    • 原创:19篇
    • 转载:228篇
    • 译文:0篇
    • 评论:9条
    最新评论