android定时任务的优劣
来源:互联网 发布:淘宝天猫内部优惠券网 编辑:程序博客网 时间:2024/06/02 02:25
android定时任务的优劣
在项目中,对于android的定时任务请求我在这方面还是有点陌生,总之来说,还是有点懒。
不过我有一个好导师,让我这懒的习惯,越来越没有吧
话不多说,进入主题。在网上找了文档,看了下,android的定时任务分为三种。
android的定时任务有三种方式
- 采用Handler与线程的sleep(long)方法
- 采Handler的postDelayed(Runnable, long)方法
- 采用Handler与timer及TimerTask结合的方法
采用Handler与线程的sleep(long)方法不建议使用(因为是Java的方式)
handler主要用来处理接受到的消息。
1.定义一个Handler类,用于处理接受到的Message
Handler handler=new Handler(){ public void handlerMessage(Message msg){ super.handleMessage(msg); }}
2.新建一个实现Runnable接口的线程类
public class MyThread implements Runnable { @Override public void run() { // TODO Auto-generated method stub while (true) { try { Thread.sleep(10000);// 线程暂停10秒,单位毫秒 Message message = new Message(); message.what = 1; handler.sendMessage(message);// 发送消息 } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
}
3.在需要启动线程的地方加入下面语句:
new Thread(new MyThread()).start();
启动线程后,线程每10秒发送一次消息
不好的是:线程会一直在后台运行,会使内存变慢。
采Handler的postDelayed(Runnable, long)方法(android最简单的实现)
- 定义一个Handler类
Handler handler=new Handler(); Runnable runnable=new Runnable() { @Override public void run() { // TODO Auto-generated method stub //要做的事情 handler.postDelayed(this, 2000); } };
- 启动计时器
handler.postDelayed(runnable, 2000);//每两秒执行一次runnable.
- 停止计时器
handler.removeCallbacks(runnable);可以在不用的时候及时停止线程
采用Handler与timer及TimerTask结合的方法(比较多的任务时建议使用)
- 定义定时器、定时器任务及Handler句柄
private final Timer timer = new Timer(); private TimerTask task; Handler handler = new Handler() { @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub // 要做的事情 super.handleMessage(msg); } };
- 初始化计时器任务
[java] view plaincopy
task = new TimerTask() { @Override public void run() { // TODO Auto-generated method stub Message message = new Message(); message.what = 1; handler.sendMessage(message); } };
- 启动定时器
timer.schedule(task, 2000, 2000);
- 停止计时器
timer.cancel();
定时器任务就是说当定时器到达指定的时间要做的工作,这里是想Handler发送一个消息,由Handler类进行处理。
java.util.Timer.schedule(TimerTask task, long delay):这个方法是说dalay/1000秒后执行tak只执行一次。
ava.util.Timer.schedule(TimerTask task, long delay, long period):这个方法是说,delay/1000秒后执行task,然后进过period/1000秒再次执行task,这个用于循环任务,执行无数次,当然,你可以用timer.cancel();取消计时器的执行。
每一个Timer仅对应唯一一个线程。Timer不保证任务执行的十分精确。Timer类的线程安全的。
AlarmManager
看了很多的资料,大家都提到了AlarmManager这个闹钟的定时器。
AlarmManager是使用机制有的称呼为全局定时器,称为闹钟。通过对它的使用,它的作用和Timer有点相似。
都有两种相似的用法:
在指定时长后执行某项操作,周期性的执行某项操作。
AlarmManager对象配合Intent使用,可以定时的开启一个Activity,发送一个BroadCas或者开启一个Service。
AlarmManager常用的方法有以下几个:
// 取消已经注册的与参数匹配的定时器
void cancel(PendingIntent operation)
//注册一个新的延迟定时器
void set(int type, long triggerAtTime, PendingIntent operation)
//注册一个重复类型的定时器
void setRepeating(int type, long triggerAtTime, long interval, PendingIntent operation)
//注册一个非精密的重复类型定时器
void setInexactRepeating (int type, long triggerAtTime, long interval, PendingIntent operation)
//设置时区
void setTimeZone(String timeZone)
定时器主要类型(type参数):
public static final int ELAPSED_REALTIME
// 当系统进入睡眠状态时,这种类型的闹铃不会唤醒系统。直到系统下次被唤醒才传递它,该闹铃所用的时间是相对时间,是从系统启动后开始计时的,包括睡眠时 间,可以通过调用SystemClock.elapsedRealtime()获得。系统值是3 (0x00000003)。
public static final int ELAPSED_REALTIME_WAKEUP
//能唤醒系统,用法同ELAPSED_REALTIME,系统值是2 (0x00000002) 。
public static final int RTC
//当系统进入睡眠状态时,这种类型的闹铃不会唤醒系统。直到系统下次被唤醒才传递它,该闹铃所用的时间是绝对时间,所用时间是UTC时间,可以通过调用 System.currentTimeMillis()获得。系统值是1 (0x00000001) 。
public static final int RTC_WAKEUP
//能唤醒系统,用法同RTC类型,系统值为 0 (0x00000000) 。
但是 AlarmManager一旦启动就会一直在后台运行(除非执行cancel方法),可以在“应用管理”中看到这个应用状态是正在运行。 “强行停止”可以让Alarmmanager停掉。
AlarmManager的取消:(其中需要注意的是取消的Intent必须与启动Intent保持绝对一致才能支持取消AlarmManager)
参考文献(http://www.tuicool.com/articles/zyI3a2U)
[参考文献](http://www.2cto.com/kf/201311/2558
参考文献(http://blog.csdn.net/job_dinge/article/details/7929750)42.html)42.html)
- android定时任务的优劣
- android的定时任务
- android定时任务的实现
- Android定时任务的解决方案
- Android 定时任务的实现
- android的优劣
- Android 定时任务的多种实现方式
- android后台执行的定时任务
- Android中定时任务的实现
- android: 后台执行的定时任务
- Android后台执行的定时任务
- Android中定时任务的实现方法
- Java,Android定时任务的写法
- Android定时任务及闹钟的实现
- Android定时任务
- android 定时执行任务
- Android定时任务
- Android任务定时执行
- C函数调用原理
- @class和#import的区别
- Iterator
- 清华梦的粉碎—写给清华大学的退学申请(转自王垠Blog)
- Cglib动态代理
- android定时任务的优劣
- 关于几种模式和jdk不同版本新特性的总结
- ubuntu完美搭建git服务器
- 浅谈设计模式
- ARM开发板移植android4.0流程
- tcp4---(总结一下)---what.if.process.crash.and.reboot
- json与java实体类的相互转换
- HDU 1754 I Hate It
- 关于平台常用技术资料