我觉得还是这样做,你还是设置10S刷新,只不过刷新的时候起个子线程去处理数据,然后数据处理完通过handler来通知UI更新(这一过程不考虑10s的限制),10s只是通知数据要去处理了,真正显示可能是在10S以后,然后显示更新成功了,再重启timer计时。

解决方案 »

  1.   

    用Handler来做吧。有PostDelyed方法,参数可以这是等待时间数,如果想暂停或者干嘛的,只要将消息队列清空或者looper退出就可以了,这个要比Timer好多了,你可以随意控制
      

  2.   

    我做的Android实现秒表计时器的程序设计,包含源代码http://blog.csdn.net/ameyume/archive/2010/08/08/5797161.aspx
    用Timer实现的,楼主看看有没有作用?
      

  3.   

    我正在做录制视频的功能,里面用到了计时器,一秒刷新一次,其中bool是个标记,当为true时开始计时,要停止时,将bool赋值为false即可,至于重新计时,你在每次开始计时时将时间重置为0就可以了.代码如下,可以参考一下://开始录像
    public void recorder(){
    try {
    bool = true;
    myRecAudioFile = File.createTempFile(strTempFile,".mpg",myRecAudioDir);
    recorder = new MediaRecorder(); 
    recorder.setPreviewDisplay(surfaceHolder.getSurface());
    recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 
    //设置录音源为麦克风
    recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    //设置输出格式为3gp
    recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);  
    //设置视频大小
    recorder.setVideoSize(160,90);   
    //每秒的帧数
    recorder.setVideoFrameRate(5);   
    //设置视频编码
    recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); 
    //设置音频编码
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);          
    recorder.setOutputFile(myRecAudioFile.getAbsolutePath());
    recorder.prepare();
    recorder.start();
    tv01.setVisibility(View.VISIBLE);
    tv02.setVisibility(View.VISIBLE);
    tv03.setVisibility(View.VISIBLE);
    tv04.setVisibility(View.VISIBLE);
    tv05.setVisibility(View.VISIBLE);
                            
    handler.postDelayed(task, 1000); recording = true;
    isStopRecord = false;
    } catch (IOException e) {
    e.printStackTrace();
    }
    }

    //停止录像
    public void stop(){
    if (recorder == null){
    return;
    }
    recorder.stop(); bool = false; tv01.setText(format(hour));
    tv03.setText(format(minute));
    tv05.setText(format(second));
    recorder.release();
    recording = false;
    recorder = null;
    mMakeTextToast("停止:" + myRecAudioFile.getName(),true);
    // 停止录象
    isStopRecord = true;
    }

    //定时器设置,实现计时
    private Handler handler = new Handler();   
            private Runnable task = new Runnable() {   
            public void run() {   
             if(bool){
             handler.postDelayed(this, 1000); 
             second ++;
             if(second < 60){
             tv05.setText(format(second));
             }else if(second < 3600){
             minute = second / 60;
             second = second % 60;
             tv03.setText(format(minute));
             tv05.setText(format(second));
             }else{
             hour = second / 3600;
             minute = (second % 3600) / 60;
             second = (second % 3600) % 60;
             tv01.setText(format(hour));
             tv03.setText(format(minute));
             tv05.setText(format(second));
             }
             }
            }   
        };