本帖最后由 gz_boy 于 2010-03-30 10:24:54 编辑

解决方案 »

  1.   

    TimerTask类的run方法为什么用这个循环:
    for(;mSleepTime>0;mSleepTime--){
        handler.sendMessage(handler.obtainMessage(1));    
    }一次只发一个消息不好吗? Handler不是同步的吧,最后得到的mSleepTime应该都是0了...
      

  2.   

    To:ltc_mouse
    在帖子中你不使用循环进行减数操作,请问下有别的想法可以让mSleepTime 进行自减少倒计时吗?
    for(;mSleepTime>0;mSleepTime--){
    handler.sendMessage(handler.obtainMessage(1)); 
    }pressbar( mThread控制)在mSleepTime为0时开始start。mSleeptime不使用循环减少到0,mThread就不能执行法.start().所以必须让mSleepTime最终为0的。
    TimerTask task = new TimerTask(){  
    public void run() {  
    Message message = new Message();      
    message.what = 1;
    //for(;mSleepTime>0;mSleepTime--){
    handler.sendMessage(handler.obtainMessage(1));    
    //}
    if(mSleepTime==0){
    handler.sendMessage(handler.obtainMessage(2));
            isRunning = true;   
    mThread.start();
    }
    }  
    }; 
      

  3.   

    run()里不需要循环,不表示不需要对mSleepTime自减啊。试试:    TimerTask task = new TimerTask(){
            public void run() {  
                Message message = new Message();      
                message.what = 1;            mSleepTime--;
                if(mSleepTime > 0) {
                    handler.sendMessage(handler.obtainMessage(1));
                }            if(mSleepTime==0){
                    handler.sendMessage(handler.obtainMessage(2));    
                    isRunning = true;   
                    mThread.start();    
                }
            }
        };
    在mSleepTime为0后,这个timer是不再需要了吧。应该考虑调用Timer的cancel()方法。使用Handler也能计时的。例如使用sendMessageDelayed
      

  4.   

    OK,搞定.谢谢ltc_mouse的指点。    TimerTask task = new TimerTask(){
            public void run() {  
                Message message = new Message();      
                message.what = 1;            --mSleepTime;
                if(mSleepTime >= 0) {
                    handler.sendMessage(handler.obtainMessage(1));
                }            if(mSleepTime<0){
                    handler.sendMessage(handler.obtainMessage(2));    
                    isRunning = true;   
                    mThread.start();    
                }
            }
        };mSleepTime还是必须“mSleepTime<0”,否则会出现00:00:01程序无法继续下去的问题。“使用Handler也能计时的。例如使用sendMessageDelayed”  还没尝试。