Android TimerTask 的简单应用及注意事项
Android TimerTask的简单应用及注意事项
Android应用开发中常常会用到定时器,不可避免的需要用到TimerTask定时器任务这个类
下面简单的一个示例演示了如何使用TimerTask
这个示例演示了3秒未有触屏事件发生则锁屏(只是设置下文本,意思一下)有触屏事件则解除锁定
publicclassColTimerTaskActivityextendsActivity{ /**Calledwhentheactivityisfirstcreated.*/ privatefinalStringTAG="ColTimerTaskActivity"; privatefinalintEVENT_LOCK_WINDOW=0x100; privateTextViewtextView; privateHandlermHandler; privateTimermTimer; privateMyTimerTaskmTimerTask; @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); textView=(TextView)findViewById(R.id.textview); mHandler=newHandler(){ publicvoidhandleMessage(Messagemessage){ Log.i(TAG,"messagewhat="+message.what); if(message.what==0x100){ lockWindow(); } } }; mTimer=newTimer(true); resumeWindow(); StartLockWindowTimer(); } publicbooleanonTouchEvent(MotionEventevent) { //TODOAuto-generatedmethodstub resumeWindow(); StartLockWindowTimer(); returnsuper.onTouchEvent(event); } publicvoidresumeWindow(){ textView.setText("mainwindow"); } publicvoidlockWindow(){ textView.setText("lockwindow"); } publicvoidStartLockWindowTimer(){ if(mTimer!=null){ if(mTimerTask!=null){ mTimerTask.cancel();//将原任务从队列中移除 } mTimerTask=newMyTimerTask();//新建一个任务 mTimer.schedule(mTimerTask,3000); } } classMyTimerTaskextendsTimerTask{ @Override publicvoidrun(){ //TODOAuto-generatedmethodstub Log.i(TAG,"run..."); Messagemsg=mHandler.obtainMessage(EVENT_LOCK_WINDOW); msg.sendToTarget(); } } }
这里需要注意两个问题:
if(mTimerTask!=null){ mTimerTask.cancel();//将原任务从队列中移除 }
每次放定时任务前,确保之前任务已从定时器队列中移除
mTimerTask=newMyTimerTask();//新建一个任务
每次放任务都要新建一个对象,否则出现一下错误:
ERROR/AndroidRuntime(11761):Java.lang.IllegalStateException:TimerTaskisscheduledalready
所以同一个定时器任务只能被放置一次
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!