Я видел, как этот вопрос появлялся несколько раз во время поиска, но, похоже, ни один из них не решил мою проблему. Мой таймер обратного отсчета запускается в службе и работает отлично, за исключением того факта, что он имеет задержку перед достижением onFinish(). Он будет идти 5, 4, 3, 2, 1 (долгая пауза) onFinish(). Однако эта проблема; не происходит, когда я использую режим отладчика из студии Android на своем устройстве. Когда устройство не подключено к отладчику, мое приложение испытывает задержку во времени. Есть ли способ устранить проблему с исправлением, продолжая использовать таймер обратного отсчета? Другие решения, которые я видел, включали использование обработчиков или исполняемых модулей, но я предпочитаю говорить с таймером обратного отсчета. Код ниже содержит таймер обратного отсчета внутри службы. Я ценю любую оказанную помощь.
Сервисный код
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (intent != null) {
if (startService) {
startService = false;
data = intent.getIntExtra("the", 0);
// int progress = data/1000;
// CountDownAct.timeProgressBar.setMax(progress);
//
// CountDownAct.timeProgressBar.setProgress(1000);
countDownTimer = new CountDownTime(data, 1000);
countDownTimer.start();
// timer = new Timer();
// IntentFilter filter = new IntentFilter();
// filter.addAction(ALARM_SERVICE);
// registerReceiver(timer, filter);
}
}
}
public class CountDownTime extends CountDownTimer {
/**
* @param millisInFuture
* The number of millis in the future from the call to
* {@link #start()} until the countdown is done and
* {@link #onFinish()} is called.
* @param countDownInterval
* The interval along the way to receive
* {@link #onTick(long)} callbacks.
*/
public CountDownTime(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}
@Override
public void onTick(long millisUntilFinished) {
long millis = millisUntilFinished;
int progress = (int) (millisUntilFinished / 1000);
// this is the format which reads the time data from the user and
// makes it readable
hms = String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(millis), TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)),
TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));
CountDownAct.timeTextView.setText(hms);
CountDownAct.timeProgressBar.setProgress(progress);
Log.i("CountDownService", hms);
}
@Override
public void onFinish() {
CountDownAct.timeProgressBar.setProgress(0);
Intent goBack = new Intent(getApplicationContext(), alarmtimefinished.class);
goBack.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
goBack.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(goBack);
// CountDownService.startService = true;
//
}
}