Android 开发 重写定位器类Timer与TimerTask
前言
google在Android上提供了很多个关于时间的操作类,比如长时间的定时操作可以使用AlarmManager 定时器,而中等时间和短时间的定时操作就依靠Timer与TimerTask来实现.其实Timer与TimerTask的用法很简单并没有可以多说的,直接看代码即可.
简单的Demo
有一点要注意TimerTask的run()是在子线程的.
private void timeTask(){
TimerTask timerTask = new TimerTask() { //创建定时触发后要执行的逻辑任务
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, "触发TimerTask", Toast.LENGTH_SHORT).show();
}
});
}
};
Timer timer = new Timer();
timer.schedule(timerTask, 5*1000); //启动定时任务
}
TimerTask API介绍
仅有三个拉出来说明一下
timerTask.scheduledExecutionTime();//返回这个任务的预定执行时间
timerTask.cancel();//取消,取消这个任务
timerTask.run();//执行run(); 差不多就是立即执行任务了
Timer API介绍
timer.cancel();//取消这个定时器,但是不停止正在执行的任务,停止后此定时器无法在添加TimerTask任务(线程被关闭了)
timer.purge();//清除TimerTask任务,从此计时器的任务队列中删除所有已取消的任务,调用此方法对计时器的行为没有影响
timer.scheduleAtFixedRate(timerTask, 5*1000, 10*1000);//重复执行任务,第二个参数为延迟执行任务的时间,第三个参数为后续重复任务的延迟时间
请注意 timer.cancel(); 这里的取消是取消定时器与取消任务是不一样的..
一些坑
1.Timer 定时器,在定时长时间任务的情况下就会开始出现不准确或者不触发,推迟很久触发的问题。能准确触发是根据设备是否睡眠的情况而定的,如设备未睡眠那么30分钟内的都是相对准确的,但是不保证大于30分钟是否准确。 而如果设备已经睡眠,只要睡过去了大概就根据Doze模式的周期触发定时器了。定时越长越不准确并可能被延迟的越长或者干脆不触发。 以上是我个人在项目实际情况下的经验之谈。 我在物联设备项目里,我们的物联设备关闭了Doze模式,但是原生的Android系统依然会有自带睡眠功能(这个自带的睡眠可以被一直打扰唤醒,没有Doze模式这么强规则),如果你设定一个3小时后的任务,那么基本上是不会触发这个任务的。 而设置30分钟左右的任务还是能够准确触发。 所以结论是如果长时间的定时任务还是交给AlarmManager来完成。 而30分钟内的定时任务并且设备不会睡眠的情况下可以交给Timer来完成,如果是10分钟 5分钟的短定时 完全就可以交给它来完成定时任务了。
end
Android 开发 重写定位器类Timer与TimerTask的更多相关文章
- Android开发常用工具类
来源于http://www.open-open.com/lib/view/open1416535785398.html 主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java. 目前 ...
- Android开发 静态static类与static方法持有Context是否导致内存泄露的疑问
简述 在Android开发的过程中,难免会使用单例模式或者静态方法工具类.我们会让它们持有一些外部的Context或者View一般有以下几种情况: 单例模式,类的全局变量持有Context 或 Vie ...
- 最全Android开发常用工具类
主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java. 目前包括 HttpUtils.DownloadManagerPro.Safe.ijiami.ShellUtils.Pack ...
- 29个android开发常用的类、方法及接口
在安卓开发中,我们常常都需要借助各种各样的方法.类和接口来实现相关功能.提升开发效率,但对于初学者而言,什么时候该用什么类.方法和接口呢?下面小编整理了29个,日常开发中比较常用的类.方法.接口及其应 ...
- Android开发中JavaBean类和序列化知识的理解
原创文章,转载请注明出处:http://www.cnblogs.com/baipengzhan/p/6296121.html Android开发中,我们经常用到JavaBean类以及序列化的知识,但经 ...
- android 开发 常用工具类
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38965311,本文出自[张鸿洋的博客] 打开大家手上的项目,基本都会有一大批的辅 ...
- android开发网络连接工具类(一)
网络连接工具类整理: package com.gzcivil.utils; import java.io.IOException; import java.util.ArrayList; import ...
- android开发Tost工具类管理(一)
Tost工具类管理: package com.gzcivil.utils; import android.content.Context; import android.widget.Toast; / ...
- Android开发中Context类的作用以及Context的详细用法
Android中Context的作用以及Context的详细用法 本文我们一起来探讨一下关于Android中Context的作用以及Context的详细用法,这对我们学习Android的资源访问有很大 ...
随机推荐
- 使用new来分配内存
对指针的工作方式有一定的了解之后,来看看他如何实现在程序运行时分配内存.前面我们都将指针初始化为变量的地址(int * pt; pt = & a):变量是在编译时分配的有名称的内存,而指针只是 ...
- Layer弹出层销毁问题
Layer弹出层销毁问题 最近开发时有个问题记录一下 点击按钮显示相应的图表信息,当时自己点感觉没问题,谁知到测试手里多次点击就会有后续打开的窗口无法渲染问题,看了半天才发现是调用layer.clos ...
- jQuery登录界面的文本框焦点代码
<script type="text/javascript"> $(function(){ $("#address").focus(function ...
- uWSGI+Django (中)
环境是ubuntu 14.0 python3 django 1.10 1:安装uwsgi sudo apt-get install libpcre3 libpcre3-dev sudo pip3 i ...
- qt+opencv 构建项目时报错——no such file or directory
构建前,记得,一定一定一定要先点击执行qmake:
- Pagedown learning notes
Pagedown Links Google wiki page Download Markdown.Converter.js var converter = new Markdown.Converte ...
- robot framework关键词记录单(更新中)
1.select Radio Button groupname value 选择单选按钮 A)适用于input的html单选框,属性中包含name以及value如:Select Radio Butt ...
- IPFS 探索
IPFS 探索 比特币当前是用于存金融交易数据,有leveldb 存关键小的交易数据.那么我们的文件,譬如一个网站里面的static file 怎么办? IPFS(InterPlanetary Fil ...
- python3 多线程爆破ftp、mysql、ssh
当然 也支持ip 为 127.0.0.1-255 这样的 字典放到 dict 目录里 链接: https://pan.baidu.com/s/1htchOyN5hK9nmZlWfTiFzA 密码: v ...
- C++——volatile关键字的学习
首先声明一点,本文是关于volatile关键字的学习,学习内容主要是来自一些大牛的网络博客. 一篇是何登成先生的C/C++ Volatile关键词深度剖析(http://hedengcheng.com ...