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

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

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

(0)

相关推荐

  • 解析Java中的Timer和TimerTask在Android中的用法和实例

    在开发中我们有时会有这样的需求,即在固定的每隔一段时间执行某一个任务.比如UI上的控件需要随着时间改变,我们可以使用Java为我们提供的计时器的工具类,即Timer和TimerTask. Timer是一个普通的类,其中有几个重要的方法:而TimerTask则是一个抽象类,其中有一个抽象方法run(),类似线程中的run()方法,我们使用Timer创建一个他的对象,然后使用这对象的schedule方法来完成这种间隔的操作. schedule方法有三个参数 第一个参数就是TimerTask类型的对象

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

    Android  TimerTask 的简单应用及注意事项 Android应用开发中常常会用到定时器,不可避免的需要用到 TimerTask 定时器任务这个类 下面简单的一个示例演示了如何使用TimerTask 这个示例演示了3秒未有触屏事件发生则锁屏(只是设置下文本,意思一下)有触屏事件则解除锁定 public class ColTimerTaskActivity extends Activity { /** Called when the activity is first created.

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

    Android  TimerTask 的简单应用及注意事项 Android应用开发中常常会用到定时器,不可避免的需要用到 TimerTask 定时器任务这个类 下面简单的一个示例演示了如何使用TimerTask 这个示例演示了3秒未有触屏事件发生则锁屏(只是设置下文本,意思一下)有触屏事件则解除锁定 public class ColTimerTaskActivity extends Activity { /** Called when the activity is first created.

  • 将Eclipse工程转Android Studio工程的步骤与注意事项

    Gradle的基础 想要将Eclipse转为Android Studio项目,那么Gradle语法是必修课.此处引进一篇文章,基础就不写了,Gradle基础 引言 目前,用 Android Studio 来开发 Android 项目已是大势所趋,就连 Google 也已经宣布了不再支持 Eclipse .所以一些老的 Eclipse 工程转 Android Studio 工程也是有必要的.工程转换有两种:一种是兼容模式,即 Eclipse 和 Android Studio 都可以用的工程结构:一

  • Android Gradle 插件自定义Plugin实现注意事项

    目录 Android Gradle Plugin Gradle 是什么? Gradle 插件 分类 使用插件 实现一个插件 发布插件 引用插件 Android Gradle Plugin 在 Android 项目中的 build.gradle 文件中,经常可以看见一些 plugin 声明: plugins { id 'com.android.application' id 'com.android.library' } // or apply plugin: 'com.android.appli

  • android Socket实现简单聊天小程序

    android Socket实现简单聊天小程序,供大家参考,具体内容如下 服务器端: package org.hwq.echo; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; public cla

  • Android编程之简单逐帧动画Frame的实现方法

    本文实例讲述了Android编程之简单逐帧动画Frame的实现方法.分享给大家供大家参考,具体如下: 1.逐帧动画 即是通过播放预先排序好的图片来实现动态的画面,感觉像是放电影. 2.实现步骤: ① 在工程里面导入要播放的图片.此简单例子中为start_icon1,2,3. ② 在工程res文件目录下新建一个anim文件夹,在里面新建一个start_animation.xml格式文件,此文件用来定义动画播放图片的顺序及每一张图片显示停留时间. 代码如下: <?xml version="1.

  • Android编程实现简单的UDP Client实例

    本文实例讲述了Android编程实现简单的UDP Client.分享给大家供大家参考,具体如下: 该代码在4.2.2内调试通过 1.记得加权限 <uses-permission android:name="android.permission.INTERNET"/> 注意:Android 4.0之后,就不能在主线程进行socket通信,否则会抛异常. 2.代码 MainActivity.java: package mao.example.quicksend; import

  • Android 自定义ContentProvider简单实例

    Android 自定义ContentProvider简单实例 Android允许我们定义自己的的ContentProvider对象来共享数据,练练手,简单来实现一下. 要使用ContentProvider来操作数据,必须要有保存数据的场所.可以使用文件或SQLite数据库的方式来保存数据,通常使用SQLite数据库. 1,创建一个数据库帮助类,归根结底都是它在操作数据库.代码如下: package com.njue; import android.content.Context; import

  • Android实现的简单蓝牙程序示例

    本文实例讲述了Android实现的简单蓝牙程序.分享给大家供大家参考,具体如下: 我将在这篇文章中介绍了的Android蓝牙程序.这个程序就是将实现把手机变做电脑PPT播放的遥控器:用音量加和音量减键来控制PPT页面的切换. 遥控器服务器端 首先,我们需要编写一个遥控器的服务器端(支持蓝牙的电脑)来接收手机端发出的信号.为了实现这个服务器端,我用到了一个叫做Bluecove(专门用来为蓝牙服务的!)的Java库. 以下是我的RemoteBluetoothServer类: public class

  • Android Retrofit的简单介绍和使用

    Retrofit与okhttp共同出自于Square公司,retrofit就是对okhttp做了一层封装.把网络请求都交给给了Okhttp,我们只需要通过简单的配置就能使用retrofit来进行网络请求了,其主要作者是Android大神JakeWharton. 导包: compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4'//Retrofit2所需要的包 compile 'com.squareup.retrofit2:converter-gso

随机推荐