Задержка с таймером обратного отсчета

Я видел, как этот вопрос появлялся несколько раз во время поиска, но, похоже, ни один из них не решил мою проблему. Мой таймер обратного отсчета запускается в службе и работает отлично, за исключением того факта, что он имеет задержку перед достижением 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;
        //
    }

}

person leonardo    schedule 11.08.2015    source источник


Ответы (2)


Только что попробовал, очень странно.. Э-э, я не уверен, что это действительно «ответ», но решением было бы просто забыть о onFinish и создать свой собственный onfinish с помощью вроде (millisUntilFinished/1000 == 1) { // .. делай что угодно }

person Ben    schedule 11.08.2015

попробуйте вызвать таймер со 100 вместо 1000

countDownTimer = new CountDownTime(data, 100);
person Boody    schedule 11.08.2015
comment
На самом деле я пробовал это раньше, но это не сработало. Я начинаю думать, что проблема не в таймере обратного отсчета. Вы видите, что действие должно запускаться после завершения таймера обратного отсчета, и это действие включит экран. Я думаю, что мне нужно использовать широковещательный приемник. - person leonardo; 11.08.2015