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
所以同一个定时器任务只能被放置一次
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!