У меня действительно есть один сервис, работающий в фоновом режиме. Каждый раз, когда это запускается, я храню в памяти время начала в миллисекундах:
startingTime = new Date().getTime();
Я хочу отобразить хронометр, который начинает рассчитывать, когда сервис запускается и никогда не останавливается, пока пользователь не нажимает кнопку. Я хочу позволить пользователю оставлять действие, представляющее хронометр, делать некоторый материал и затем возвращаться. Но идея состоит в том, что, когда пользователь возвращается, я не хочу, чтобы хронометр перешел к 0:00 снова. Insted, который я хочу, чтобы это показало точному времени, которое передало начиная с сервиса, запустился.
Я могу вычислить прошедшее время каждый раз пользовательский возврат к действию хронометра:
elapsedTime = new Date().getTime() - startingTime;
Вещь состоит в том, что я не знаю, как сказать хронометру начинать рассчитывать с того времени!
При установке его, поскольку не работает основа хронометра. someon может объяснить, что точно "базируется", означает или как выполнить это?
большое спасибо! ДО СВИДАНИЯ
Вы можете использовать Хронометр .
Вам также следует проверить эту ветку .
РЕДАКТИРОВАТЬ: Решение:
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();
}
};
}
Базовое время - это время начала отсчета Хронометра
. Вы можете установить его с помощью Chronometer.setBase ()
. Вы должны получить базовое время, используя SystemClock.getElapsedTime ()
. Вызывайте setBase ()
со временем начала каждый раз, когда запускается Хронометр
. Если есть вероятность того, что Activity
будет уничтожена и воссоздана, пока таймер все еще активен, вам нужно будет удерживать базовое время где-то за пределами Activity
, которому принадлежит Хронометр
.