Я пытаюсь найти способ запуска таймера подсчета с определенного времени (например, 01:34:22). На данный момент у меня есть кнопка, которую можно использовать для запуска таймера, но мне нужно, чтобы таймер «продолжал», когда приложение закрыто.Возобновление таймера при повторном открытии приложения
Поэтому мне нужно найти способ сохранить время начала таймера, а затем возобновить, когда приложение будет открыто, используя время начала и текущее время.
Это код для таймера:
public abstract class CountUpTimer {
private final long interval;
private long base;
public CountUpTimer(long interval) {
this.interval = interval;
}
public void start() {
base = SystemClock.elapsedRealtime();
handler.sendMessage(handler.obtainMessage(MSG));
}
public void stop() {
handler.removeMessages(MSG);
}
public void reset() {
synchronized (this) {
base = SystemClock.elapsedRealtime();
}
}
abstract public void onTick(long elapsedTime);
private static final int MSG = 1;
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
synchronized (CountUpTimer.this) {
long elapsedTime = SystemClock.elapsedRealtime() - base;
onTick(elapsedTime);
sendMessageDelayed(obtainMessage(MSG), interval);
}
}
};
}
И это код, я использую для установки таймера:
private void setupTimer() {
timerTextView = (TextView) findViewById(R.id.timerTextView);
timer = new CountUpTimer(1) {
@Override
public void onTick(long elapsedTime) {
timerCount = elapsedTime;
String finalTimer = String.format("%02d:%02d:%02d",
TimeUnit.MILLISECONDS.toHours(elapsedTime),
TimeUnit.MILLISECONDS.toMinutes(elapsedTime),
TimeUnit.MILLISECONDS.toSeconds(elapsedTime) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(elapsedTime))
);
timerTextView.setText(finalTimer);
}
};
timer.stop();
}
Это называется, когда представление создано.
И это код, когда кнопка запуска сливают:
private void addTimerLister() {
startTimerButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
timer.start();
DateTime startTime = DateTime.now();
long startTimeMilliseconds = startTime.getMillis();
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("attractionTimerName", currentAttraction.name);
editor.putLong("attractionTimerStart", startTimeMilliseconds);
editor.putBoolean("attractionTimerRunning", true);
editor.commit();
animateFade();
}
});
}
Как вы можете видеть, я отталкивался экономии времени начала, но мне нужен способ, чтобы возобновить таймер когда приложение будет открыто. При необходимости я могу использовать JodaTime.
У кого-нибудь есть предложения?
Да, это то, что я собираюсь сделать. Я не уверен, как возобновить таймер. – user3746428
Я подсчитываю, а не вниз. Может ли CountDownTimer использоваться для подсчета? – user3746428
Извините, я спешил, поэтому предположил, что вы используете таймер обратного отсчета. – Piyush