Android应用开发之如何使用TimerTask定时器?

时间:2013-04-22 11:44来源:凌阳教育 作者:larran 点击:
    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

    所以同一个定时器任务只能被放置一次
 
 
 
 
分享到:

凌阳教育培训【凌阳科技旗下教育品牌】——专业的培训机构,全国唯一“按班公布学员就业去向”的诚信机构

关注我们:

全国免费咨询电话:156-0117-5697或010-62981113(转2866) 服务监督电话:010-62981113-2800

京ICP备09010168号  京公网安备11010802010586号

北京培训中心:海淀区上地信息产业基地中黎科技园1号楼3层A段

Copyright © 2017 SunplusEdu Inc. All Rights Reserved