1

//自应用程序启动以来的时间计数器,一个后台任务

    private long mStartTime = 0L;

//私有 long mPauseTime = 0L;

    private TextView mTimerLabel;

//Handler 处理消息到定时器任务

    private Handler mHandler = new Handler();

    static final int UPDATE_INTERVAL = 1000;

    String timerStop1;



     @Override
     public void onCreate(Bundle savedInstanceState) {

     mTimerLabel = (TextView) findViewById(R.id.textTimer);


     if(mStartTime == 0L){
         mStartTime = SystemClock.uptimeMillis();
         mHandler.removeCallbacks(mUpdateTimeTask);
         mHandler.postDelayed(mUpdateTimeTask, 100);

       }                

        timerPauseButton.setTag(1);
        timerPauseButton.setText("Pause");



 final Button timerPauseButton = (Button) findViewById(R.id.btnTimerPause);

        timerPauseButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view){

//更改按钮文本

                  final int status =(Integer) view.getTag();

                  if(status == 1) {
                      mHandler.removeCallbacks(mUpdateTimeTask);

                      mTimerLabel.setText(timerStop1);

                      timerPauseButton.setText("Resume");
                      view.setTag(0); //resume
                  } else{

                      mHandler.removeCallbacks(mUpdateTimeTask);
                      mHandler.postDelayed(mUpdateTimeTask, 100);
                      timerPauseButton.setText("Pause");
                      view.setTag(1); //pause
                      }

            }
        });

   } 

//OnCreate结束

   private Runnable mUpdateTimeTask = new Runnable(){

            public void run() { 
                 {
                  final long start = mStartTime;
                  long millis = SystemClock.uptimeMillis()- start;

                  int seconds = (int) (millis / 1000);
                  int minutes = seconds / 60;
                  seconds = seconds % 60;

                  mTimerLabel.setText("" + minutes + ":"
                                                  + String.format("%02d", seconds));                             

                  timerStop1 = minutes + ":"
                                + String.format("%02d", seconds);

                  mHandler.postDelayed(this, 200);         
                  }

            }    
    };   

为什么我单击暂停按钮但计时器也会在后台运行?例如,当我在 5 秒后单击 3 秒内的暂停时,我单击了恢复,但它继续以 8 秒而不是 3 秒继续?谢谢

4

1 回答 1

0

SystemClock.uptimeMillis()当设备未处于深度睡眠状态时,时钟会继续运行。您只捕获一次开始时钟时间,因此当前和增长mStartTime之间的差异。暂停只会停止将时差格式化为.upTimeMillis()mStartTimemUpdateTimeTaskmTimerLabel

于 2013-04-02T09:02:16.973 回答