Android TimerTask 的简单应用及注意事项
程序员文章站
2023-12-03 11:44:46
android timertask 的简单应用及注意事项
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
所以同一个定时器任务只能被放置一次
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
上一篇: 正确使用笔记本电脑 杜绝9大恶习