Переменная, установленная в SystemClock.uptimeMillis(), не может быть сброшена

Прошу прощения, я новый разработчик.

я использую SystemClock.uptimeMillis Внутри Runnable чтобы он выглядел как секундомер. Я взял исходный код секундомера от Google. После этого я делаю модификацию каждые 30 секунд, переменная (названная цена) будет увеличиваться.


Странно то, что когда я начинаю с секундомера, цена не возвращается к первоначальному значению. Я пытался сбросить значение цены в onActivityResult но секундомер отображал случайные числа. Как заставить ценовую переменную вернуться к первоначальному значению?

Вот мои коды:

Handler handler = new Handler();
long startTime = 0L, timeinMilliseconds=0L,timeSwapBuff=0L, updateTime=0L;

int pressCounter = 0;

int price = 3000;

Runnable updateTimerThread = new Runnable() {
    @SuppressLint({"DefaultLocale", "SetTextI18n"})
    @Override
    public void run() {
        timeinMilliseconds = SystemClock.uptimeMillis()-startTime;
        updateTime = timeSwapBuff+timeinMilliseconds;
        int secs = (int)(updateTime/1000);
        int mins = secs/60;
        int hours = mins/60;

        secs%=60;
        int milliseconds = (int)(updateTime%1000);
        tv_timer.setText(String.format("%2d",hours)+":"+String.format("%2d",mins)+":"+String.format("%2d",secs)+":"
                +String.format("%3d",milliseconds));
        if (secs % 30 == 0){
            price++;
            tv_biaya.setText("Rp. "+price+",00");
        }
        handler.postDelayed(this,0);
    }
};

и когда кнопка нажала метод вызвать этот код

startTime = SystemClock.uptimeMillis();
handler.postDelayed(updateTimerThread,0);

1 ответ

Решение

Кажется, что цена все еще растет, потому что логика "цена% 30 == 0". Виноват. Когда секундомер переходит в 0, значение% 30 также равно 0. Следовательно, оно не переходит к исходному значению. Я изменил логику, что я делаю новый новый Runnable по цене.

Другие вопросы по тегам