一、Timer

Timer是Android直接启动定时器的类,TimerTask是一个子线程,方便处理一些比较复杂耗时的功能逻辑,经常与handler结合使用。

跟handler自身实现的定时器相比,Timer可以做一些复杂的处理,例如,需要对有大量对象的list进行排序,在TimerTask中执行不会阻塞子线程,常常与handler结合使用,在处理完复杂耗时的操作后,通过handler来更新UI界面。

timer.schedule(task, delay,period);

task: TimerTask类型的对象,实现TimerTask的run()方法就是要周期执行的一个任务;

delay : 从定时器初始化成功 开始启动 的延迟时间。

period:定时器的间隔时间。

第三个参数就是执行的周期,为long类型。

TimerTask task= new TimerTask() {

@Override

public void run() {

count++;

Log.i("MainActivity",count + "");

}

};

new Timer().shedule(task,0,1000);//

以下是几种调度task的方法:

//time为Date类型:在指定时间执行

timer.schedule(task, time);

//firstTime为Date类型,period为long,表示从firstTime时刻开始,每隔period毫秒执行一次。

timer.schedule(task, firstTime,period);

//delay 为long类型:从现在起过delay毫秒执行一次。

timer.schedule(task, delay);

//delay为long,period为long:从现在起过delay毫秒以后,每隔period毫秒执行一次。

timer.schedule(task, delay,period);

//time为Date类型:在指定时间执行一次。

timer.schedule(task, time);

//firstTime为Date类型,period为long,表示从firstTime时刻开始,每隔period毫秒执行一次。

timer.schedule(task, firstTime,period);

//delay 为long类型:从现在起过delay毫秒执行一次。

timer.schedule(task, delay);

//delay为long,period为long:从现在起过delay毫秒以后,每隔period毫秒执行一次。

timer.schedule(task, delay,period);

注意: 1.taskonDestory()中取消掉,否则可能发生崩溃

2.用TimerTask定时进行某些操作的APP,即使退出了,TimerTask中依然会运行一会,但是不能长时间运行

3.对于部分手机,如果你在TimerTask直接更新了UI线程是不会报错的,而且运行正常,但是一定注意,更新UI一定要在主线程中执行,否则排查错误的时候你懂得。而且这个东西特别耗电,特别耗电,特别耗电,重要的事情说三遍,一定在不使用的时候关闭

二 、CountDownTimer

CountDownTimer cdt = new CountDownTimer(10000, 100) {

@Override

public void onTick(long millisUntilFinished) {

tv_hello.setText(millisUntilFinished + "");

}

@Override

public void onFinish() {

}

};

cdt.start();

onTick中的方法一次

直到执行完10000/100次为止,最后会执行onFinish()

三、 AlarmManager

Intent intent2 = newIntent(ReadLogService.this,TestBroadcast.class);

PendingIntent pd=PendingIntent.getBroadcast(getApplicationContext(),0,intent2,PendingIntent.FLAG_ONE_SHOT);

AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);

long triggerTime =SystemClock.elapsedRealtime() + 5*1000;

am.set(AlarmManager.ELAPSED_REALTIME,triggerTime, pd);

上面就是定时器的基本用法,先获取manager,然后定义闹钟的flag,循环时间,到指定时间发出的pendingIntent。

一般都发出的pendingIntent都是广播,我们自定义一个广播接收器,就可以通过接收这个广播,来处理自己的功能逻辑了。

这里需要注意在独立进程中配置,这是android所定义的

1,Alarm定时不需要程序自身去维护,而又系统来维护,使得程序更好避免了容易出错问题,更是占用系统资源,cpu占有率。

2,即使程序退出后,程序自身不会有任何烦恼的问题,系统到时间自动调用对应组件执行定义好的逻辑

3,定时的多样性,包括一次定时,循环定时(在xx年x月x日执行,周一至周五执行,每天几点几分执行。。。)

四、 handler

Handler可以帮助我们在子线程中操作UI线程,例如子线程解析数据,解析结束后通知UI刷新界面。他本身也可以实现定时器。

private Handler handler = Handler() {

public handleMessage(android.os.Message msg) {

switch (msg.what) {

:

// 移除所有的msg.what为0等消息,保证只有一个循环消息队列再跑

handler.removeMessages();

// app的功能逻辑处理

...

// 再次发出msg,循环更新

handler.sendEmptyMessageDelayed(, );

break;

:

// 直接移除,定时器停止

handler.removeMessages();

break;

default:

break;

}

};

};

只要在启动定时器的时候,Handler.sendEmptyMessage(0),定时器就启动了。继续循环和停止的方法,注释上已经写了。

每次循环都是在主线程中操作,避免了子线程和主线程之间的穿插交互,个人觉得比timer好控制,功能实现也很简单。

个人觉得比较适用连续更新UI,不做复杂耗时的处理的情况,例如在播放器中,我们需要更新当前播放进度的时间的显示,仅仅是更新了文字显示,用handler就是个不错的选择。

五、Thread

Thread实现定时器是创建一个子线程,在里面while循环,可以通过handler来更新UI。个人觉得Thread和Timer没区别,只是长得不一样。

private MyThread thread;

private class MyThread extends Thread {

public boolean stop;

public () {

while (!stop) {

// 处理功能

// 通过睡眠线程来设置定时时间

{

Thread.sleep();

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

};

};

/**

* 启动线程

* */

private start() {

(thread == ) {

thread = MyThread();

thread.start();

}

}

/**

* 停止线程

* */

private () {

(thread != ) {

thread.stop = ;

thread = ;

}

}

觉得跟Timer差不多,没什么特殊优点

跟Timer差不多,多线程如果考虑不周经常会出问题,经常会出现多个相同功能的线程同时存在,android本身对于子线程的使用使用数量是有限制的,而且一个app同时跑多个线程是一个很可怕的事情,所以和Timer一样,使用的时候一定要谨慎考虑。

以上所述是小编给大家介绍的Android实现定时器的五种方法实例详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

android 实现毫秒定时器,Android实现定时器的五种方法实例详解相关推荐

  1. android+发邮件,Android发送邮件的方法实例详解

    Android发送邮件的方法实例详解 时间:2021-05-20 本文实例讲述了Android发送邮件的方法.分享给大家供大家参考,具体如下: 在android手机中实现发送邮件的功能也是不可缺少的. ...

  2. android自定义view案例,Android自定义View的实现方法实例详解

    一.自绘控件 下面我们准备来自定义一个计数器View,这个View可以响应用户的点击事件,并自动记录一共点击了多少次.新建一个CounterView继承自View,代码如下所示: 可以看到,首先我们在 ...

  3. android java 写文件操作_Android编程之文件的读写实例详解

    本文实例分析了Android编程之文件的读写方法.分享给大家供大家参考,具体如下: Android的文件读写与JavaSE的文件读写相同,都是使用IO流.而且Android使用的正是JavaSE的IO ...

  4. android studio发邮件功能,Android发送邮件的方法实例详解

    本文实例讲述了Android发送邮件的方法.分享给大家供大家参考,具体如下: 在android手机中实现发送邮件的功能也是不可缺少的.如何实现它呢?下面以简单的例子进行说明. 程序如下: import ...

  5. Android TV 智能电视/盒子 APP 开发焦点控制 两种方法实例

    感谢分享 http://www.7po.com/thread-564068-1-1.html 第一种方法: 采用Android自带的直接控制焦点上下左右的方法.这种方法的前提是必须知道每个view的i ...

  6. 电脑android文件夹打开方式,电脑打开apk文件的方法步骤详解

    apk文件是可以安装到手机上面的程序,在安卓手机上只要用文件管理器打开这个文件就可以开始安装了.在这里主要说一下在电脑上怎么打开apk文件,提取apk文件的资源.下面是学习小编给大家整理的有关介绍电脑 ...

  7. Android百度地图实例详解之仿摩拜单车APP(包括附近车辆、规划路径、行驶距离、行驶轨迹记录,导航等)

    Android百度地图实例详解之仿摩拜单车APP(包括附近车辆.规划路径.行驶距离.行驶轨迹记录,导航等) 标签: android百度地图行驶轨迹记录共享单车行驶距离和时间 2017-03-08 20 ...

  8. android中怎么网络判断,Android中判断网络是否连接实例详解

    Android中判断网络是否连接实例详解 在android中,如何监测网络的状态呢,这个有的时候也是十分重要的,方法如下: public class ConnectionDetector { priv ...

  9. 【Android】Eclipse自动编译NDK/JNI的三种方法

    [Android]Eclipse自动编译NDK/JNI的三种方法 SkySeraph Sep. 18th  2014 Email:skyseraph00@163.com 更多精彩请直接访问SkySer ...

最新文章

  1. 【Groovy】Groovy 动态语言特性 ( Groovy 中的变量自动类型推断以及动态调用 | Java 中必须为变量指定其类型 )
  2. mysql 高可用工具_MySQL Utilities 高可用工具体验
  3. LeetCode 456. 132模式(逆序遍历+单调栈)
  4. uri uri_什么是URI? 了解许可证术语以确保合规
  5. 饮冰三年-人工智能-Python-16Python基础之迭代器、生成器、装饰器
  6. jQuery调用WebService详解
  7. [LeetCode] 47. Permutations II_Medium tag: DFS, backtracking
  8. 魔方机器人之下位机编程----串口接收数据并解析
  9. Java 实现 8 大排序算法
  10. android 实现应用程序后台运行的说明
  11. 30分钟 带你浅入seajs源码
  12. php如何获取当前的cookie,怎么获取cookie的值
  13. java简单实现一个缓存_java简单实现缓存的三种方法
  14. IGBT 直通短路过程问题分析
  15. 器件选型--电源电容滤波
  16. FreeIPA问题记录
  17. 融资租赁产品计算内部收益率IRR
  18. 智商情商哪个重要_智商与情商哪个更重要 辩论
  19. HDU 2042 不容易系列之二
  20. BLN/BNA--surfer文件格式说明

热门文章

  1. 【作业】RGB/BMP转YUV格式及YUV视频拼接
  2. RV1126/RV1109:Camera Driver
  3. git push 详解
  4. Python面试题整理-牛客网
  5. 科技英语交流作业(1)
  6. onenet数据实时更新到mysql_使用注意
  7. Rational Rose工具使用技巧
  8. IAR编译release版本的STM32程序文件不是0x8000000和0x20000000区域的
  9. 区块链治理与Polkadot的链上治理实践
  10. 【数学建模】2023年华为杯第十九届研究生数学建模大赛E题