Android实现定时器的几种方法
前言
正文
AlarmManager
AlarmManager am = (AlarmManager)mContext.getSystemService(Context.ALARM_SERVICE);
// Schedule the alarm!
Intent intent = new Intent(XXXXX);
PendingIntent sender = PendingIntent.getBroadcast(mcontext,requestCode, intent, 0);
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
firstTime, 30*1000, sender);
<receiver android:name="com.xxxx.Receiver" android:process=":remote" />
优点总结##
适用场景##
Handler
private Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case 0:
// 移除所有的msg.what为0等消息,保证只有一个循环消息队列再跑
handler.removeMessages(0);
// app的功能逻辑处理
...
// 再次发出msg,循环更新
handler.sendEmptyMessageDelayed(0, 1000);
break;
case 1:
// 直接移除,定时器停止
handler.removeMessages(0);
break;
default:
break;
}
};
};
优点总结##
适用场景##
Timer
// 初始化定时器
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
Log.e("lzp", "timer excute");
}
}, delay, period);
// 停止定时器
private void stopTimer(){
if(timer != null){
timer.cancle();
// 一定设置为null,否则定时器不会被回收
timer = null;
}
}
period:定时器的间隔时间。
优点总结##
适用场景
**
Thread##
private MyThread thread;
private class MyThread extends Thread {
public boolean stop;
public void run() {
while (!stop) {
// 处理功能
// 通过睡眠线程来设置定时时间
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
};
/**
* 启动线程
* */
private void start() {
if (thread == null) {
thread = new MyThread();
thread.start();
}
}
/**
* 停止线程
* */
private void stop() {
if (thread != null) {
thread.stop = true;
thread = null;
}
}
优点总结
适用场景
结尾
以上就是我个人使用过的定时器的几种实现的方法,但是都仅仅是简单的介绍,更为详细的用法在网上有很多相关的资料.
评论