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)

相关推荐

  • Android Studio添加第三方库的注意事项

    前言 很多人开始安卓入门的学习,都会选择Google官方的Android Studio作为开发工具,由于他跟之前的Eclipse不太一样,所以出的问题也比较多.主要是导入的问题和android studio自带的android 高版本SDK所带来的问题. 首先说一说将第三方库导入Android Studio的方法,以xUtils为例,导入jar包的方式,比较简单,再次不做介绍.我门主要讲的是library库文件引入的方式. 第一步我们要做的是将要引入的包,放在我们的工程目录下,如下图 然后在我们

  • Android onNewIntent()触发机制及注意事项

    一.onNewIntent() 在IntentActivity中重写下列方法:onCreate onStart onRestart  onResume  onPause onStop onDestroy  onNewIntent 1.其他应用发Intent,执行下列方法: onCreate onStart onResume 发Intent的方法: Uri uri = Uri.parse("philn://blog.163.com"); Intent it = new Intent(In

  • Android 程序申请权限注意事项

    为Android 程序申请权限注意 Android系统提供为程序提供了权限申请,即在manifest中使用uses-permission来申请即可.实现起来非常简单,但是有些问题会随之浮出水面. 常见的现象是,有时候新加一个权限,(在Google Play上)程序显示的支持的设备会减少. 为什么权限越多,支持设备越少 因为有些权限隐式地需要feature,即当你显示使用uses-permission,会默认地为程序加入uses-feature. 而Android以及Google Play判断是否

  • Android NDK中socket的用法以及注意事项分析

    Android NDK中使用socket的整个过程分为以下几部分:第一部分: 创建socket并绑定IP和端口 复制代码 代码如下: #include <sys/select.h>#include <sys/socket.h>#include <arpa/inet.h>#define MAX_DATA_BUF_LEN 10240int sd = INVALID_SOCKET;sockaddr_in addr_org;  // 发送端地址sd = socket(AF_IN

  • Android 程序执行Linux命令的解决方法及注意事项

    一:问题描述    在已经root过的android设备下,app执行一个linux命令,app需要获取su权限,在某些android主板下会出现异常, Command: [su] Working Directory: null Environment: null,代码如下: private void execLinuxCommand(String cmd){ Runtime runtime = Runtime.getRuntime(); try { Process localProcess =

  • Android Service自启动注意事项分析

    本文实例分析了Android Service自启动注意事项.分享给大家供大家参考,具体如下: @Override public void onStart(Intent intent, int startId) { super.onStart(intent, startId); if(intent == null) return; } @Override public void onDestroy() { super.onDestroy(); Intent intent = new Intent(

  • 详解Android Service 使用时的注意事项

    最近有个项目刚好使用了Service,特别是AIDL远程服务,经过这次项目对Service有了更好的理解,在这里作个总结. startService / bindService 混合使用 每一次调用 startService 都会回调onStartCommand,之后调用了stopService之后就会 destroy Service.即使有多个client启动服务,那调用一次stopService 就能 destroy Service .通过这种方式还有一个好处就是Service可以通过调用

  • Android Studio3.0升级后使用注意事项及解决方法

    Gradle plugin最高版本4.* 老的项目在使用新版本时,可能会出现gradle plugin冲突的问题 Error:Failed to open zip file. Gradle's dependency cache may be corrupt (this sometimes occurs after a network connection timeout.) Re-download dependencies and sync project (requires network)

  • Android Studio 导入开源项目的正确姿势及注意事项

    报错:Error:(2, 0) Plugin with id 'realm-android' not found. 注意:项目中用到的插件,需要根目录下的build.gradle中添加它classPath, 执行下面的build.gradle文件覆盖前先检查下,或者备份一个. 当我们在Github上看到优秀的项目时,往往想下载下来学习,但是导入到AS中经常报各种错误,那么导入开源项目的正确姿势是什么呢? (1) 第一步,新建一个项目,跑一遍. (2) 打开 我们从Github下载的项目的文件.依

  • AndroidStudio升级到3.0的新特性和注意事项小结

     概述 谷歌发布Android Studio3.0正式版已经有一段时间了,最近抽空升级了一下,也踩了一些坑.特地记录一下.作为开发者第一时间体验谷歌带来的新特性是很有必要的.当然为了项目稳定性,也要根据实际情况决定是否升级相关插件 升级 从已有的IDE升级,无非就是File->Settings->Appearance&Behavior->Updates,这里可以选择升级渠道:Canary(金丝雀)Dev(开发版)Beta(Beta版)Stable(稳定版),以及是否使用安全链接.

  • Android 中ViewPager中使用WebView的注意事项

    Android 中ViewPager中使用WebView的注意事项 前言: 今天在做项目时遇到了一个小问题 首先使用ViewPager显示多个页面,然后在每个页面上使用Fragment显示数据,其中有一部分数据是通过WebView加载的Html标签. 具体xml布局如下 <?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.andr

  • Android 如何使用log4j及注意事项

     Android 使用log4j 前言: 如果要直接在android工程中使用log4j,是有点问题的,会报如下的错: 11-23 09:44:56.947: D/dalvikvm(1585): GC_FOR_MALLOC freed 3278 objects / 311568 bytes in 31ms rejecting opcode 0x21 at 0x000a rejected Lorg/apache/log4j/config/PropertySetter;.getPropertyDes

  • Android 编程下字库的使用及注意事项

    在安卓操作系统下对于 TextView 字体的支持非常有限,默认情况下 TextView 的 typeface 属性支持 "Sans","serif","monospace" 这三种字体,如果在没有指定字体的情况下,系统缺省会使用 "Sans" 作为文本显示的字体.但这三种字体只支持英文,也就是说只要你显示的文字是中文,无论你选择这三种字体中的哪一种,显示效果都是一样的.为此,谷歌又提供了另外一种字体的支持方式:字库.在 An

  • 关于Android WebView的loadData方法的注意事项分析

    loadData()中的html data中不能包含'#', '%', '\', '?'四中特殊字符,出现这种字符就会出现解析错误,显示找不到网页还有部分html代码.需要如何处理呢?我们需要用UrlEncoder编码为%23, %25, %27, %3f .可以使用以下两种代码,data为string类型的html代码1.webView.loadData(URLEncoder.encode(data, "utf-8"), "text/html",  "u

  • Android集成百度地图开发流程和注意事项

    前言 最近公司要把百度地图集成的项目中,于是我就研究了一天百度地图的SDK,当前的版本:Android SDK v3.0.0 . 虽然百度地图网上相关代码比较多,大多可能都是比较旧的版本,且百度地图API的改动感觉也比较大,所以再此跟大家分享一下实现的流程的和注意事项 一.申请密钥 重难点:获取Android签名证书的sha1值 方法一.使用keytool 进入命令提示符 获取debug的sha1值: 定位到.android文件夹下,输入keytool -list -v -keystore de

  • 60条Android开发注意事项与经验总结

    1. 全部Activity可继承自BaseActivity,便于统一风格与处理公共事件,构建对话框统一构建器的建立,万一需要整体变动,一处修改到处有效. 2.数据库表段字段常量和SQL逻辑分离,更清晰,建议使用Lite系列框架LiteOrm库,超级清晰且重心可以放在业务上不用关心数据库细节. 3. 全局变量放全局类中,模块私有放自己的管理类中,让常量清晰且集中. 4. 不要相信庞大的管理类的东西会带来什么好处,可能是一场灾难,而要时刻注意单一职责原则,一个类专心做好一件事情更为清晰. 5. 如果

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

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

  • Android生存指南之:开发中的注意事项

    1. 为Activity声明系统配置变更事件系统配置变更事件是指转屏,区域语言发生变化,屏幕尺寸发生变化等等,如果Activity没有声明处理这些事件,发生事件时,系统会把Activity杀掉然后重启,并尝试恢复状态,Activity有机会通过onSaveInstanceState()保存一些基本数据到Bundle中,然后此Bundle会在Activity的onCreate()中传递过去.虽然这貌似正常,但是这会引发问题,因为很多其他的东西比如Dialog等是要依赖于具体Activity实例的.

随机推荐