Android: хронометр как персистентный секундомер. Как установить время начала? Что Хронометр является “Основой”?

У меня действительно есть один сервис, работающий в фоновом режиме. Каждый раз, когда это запускается, я храню в памяти время начала в миллисекундах:

startingTime = new Date().getTime();

Я хочу отобразить хронометр, который начинает рассчитывать, когда сервис запускается и никогда не останавливается, пока пользователь не нажимает кнопку. Я хочу позволить пользователю оставлять действие, представляющее хронометр, делать некоторый материал и затем возвращаться. Но идея состоит в том, что, когда пользователь возвращается, я не хочу, чтобы хронометр перешел к 0:00 снова. Insted, который я хочу, чтобы это показало точному времени, которое передало начиная с сервиса, запустился.

Я могу вычислить прошедшее время каждый раз пользовательский возврат к действию хронометра:

elapsedTime =  new Date().getTime() - startingTime;

Вещь состоит в том, что я не знаю, как сказать хронометру начинать рассчитывать с того времени!

При установке его, поскольку не работает основа хронометра. someon может объяснить, что точно "базируется", означает или как выполнить это?

большое спасибо! ДО СВИДАНИЯ

8
задан LiraNuna 25 February 2010 в 01:26
поделиться

2 ответа

Вы можете использовать Хронометр .

Вам также следует проверить эту ветку .

РЕДАКТИРОВАТЬ: Решение:

public class ChronoExample extends Activity {
 Chronometer mChronometer;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);

     LinearLayout layout = new LinearLayout(this);
     layout.setOrientation(LinearLayout.VERTICAL);

     mChronometer = new Chronometer(this);

     // Set the initial value
     mChronometer.setText("00:10");
     layout.addView(mChronometer);

     Button startButton = new Button(this);
     startButton.setText("Start");
     startButton.setOnClickListener(mStartListener);
     layout.addView(startButton);

     Button stopButton = new Button(this);
     stopButton.setText("Stop");
     stopButton.setOnClickListener(mStopListener);
     layout.addView(stopButton);

     Button resetButton = new Button(this);
     resetButton.setText("Reset");
     resetButton.setOnClickListener(mResetListener);
     layout.addView(resetButton);        

     setContentView(layout);
 }

 private void showElapsedTime() {
     long elapsedMillis = SystemClock.elapsedRealtime() - mChronometer.getBase();            
     Toast.makeText(ChronoExample.this, "Elapsed milliseconds: " + elapsedMillis, 
             Toast.LENGTH_SHORT).show();
 }

 View.OnClickListener mStartListener = new OnClickListener() {
     public void onClick(View v) {
      int stoppedMilliseconds = 0;

         String chronoText = mChronometer.getText().toString();
         String array[] = chronoText.split(":");
         if (array.length == 2) {
           stoppedMilliseconds = Integer.parseInt(array[0]) * 60 * 1000
               + Integer.parseInt(array[1]) * 1000;
         } else if (array.length == 3) {
           stoppedMilliseconds = Integer.parseInt(array[0]) * 60 * 60 * 1000 
               + Integer.parseInt(array[1]) * 60 * 1000
               + Integer.parseInt(array[2]) * 1000;
         }

         mChronometer.setBase(SystemClock.elapsedRealtime() - stoppedMilliseconds);
         mChronometer.start();
     }
 };

 View.OnClickListener mStopListener = new OnClickListener() {
     public void onClick(View v) {
         mChronometer.stop();
         showElapsedTime();
     }
 };

 View.OnClickListener mResetListener = new OnClickListener() {
     public void onClick(View v) {
         mChronometer.setBase(SystemClock.elapsedRealtime());
         showElapsedTime();
     }
 };
}
21
ответ дан 3 November 2019 в 12:56
поделиться

Базовое время - это время начала отсчета Хронометра . Вы можете установить его с помощью Chronometer.setBase () . Вы должны получить базовое время, используя SystemClock.getElapsedTime () . Вызывайте setBase () со временем начала каждый раз, когда запускается Хронометр . Если есть вероятность того, что Activity будет уничтожена и воссоздана, пока таймер все еще активен, вам нужно будет удерживать базовое время где-то за пределами Activity , которому принадлежит Хронометр .

4
ответ дан 3 November 2019 в 12:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: