2013-04-02 2 views
1

// Счетчик времени с тех пор приложение начал, фоновую задачуКак возобновить его, когда я нажму кнопку «Продолжить»?

private long mStartTime = 0L; 

// Частный длинный mPauseTime = 0L;

private TextView mTimerLabel; 

// Обработчик для обработки сообщения для задания таймера

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){ 

// ChangeButtonText

    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);   
        } 

      }  
    }; 

Почему я нажимаю кнопка паузы, но таймер также будет работать в фоновом режиме? Пример, когда я нажимаю паузу в 3 сек после 5 секунд, я нажимаю кнопку «возобновить», но она продолжается с 8 сек., А не 3 сек. Thanks

ответ

0

SystemClock.uptimeMillis() часы продолжают работать, когда устройство не находится в глубоком сне. Вы только фиксируете время начала запуска один раз в mStartTime, так что разница между текущими upTimeMillis() и mStartTime растет. Приостановка останавливает только mUpdateTimeTask, который форматирует разницу во времени до mTimerLabel.

+0

ya, думаю, так. Но можете ли вы сказать мне метод? спасибо :) –

+0

Итак ... чего вы пытаетесь достичь? – laalto

+0

Я использую одну кнопку для выполнения паузы и возобновления функции таймера. Функция паузы, которую я выполнил уже, но функция возобновления имеет некоторые ошибки ... так кто-нибудь научит меня кодированию? –

Смежные вопросы