如何保存定时器class开始时间?

How to save timer class start time?

我正在我的项目中实施计数概念。它包含 3 个问题按钮。如果用户单击第一个按钮,计数就会开始。每当他按下第二个问题时.. 计数应该重置。如果用户 returns 到第一个按钮,那么计数应该更新它暂停的地方..

Handler timerHandler = new Handler();
Runnable timerRunnable = new Runnable() {

    @Override
    public void run() {
        long systemTime = System.currentTimeMillis();
        Log.d("System Time", String.valueOf(systemTime));
        long millis = systemTime - startTime;
        Log.d("millis", String.valueOf(millis));
        int seconds = (int) (millis / 1000);
        int minutes = seconds / 60;
        seconds = seconds % 60;

        qstimer.setText(String.format("%d:%02d", minutes, seconds));

        timerHandler.postDelayed(this, 500);
    }
};

将 OnCLickListener 添加到您的按钮:

private OnClickListener mOnClickListener = new OnClickListener() {

    @Override
    public void onClick(View v)
    {
        if (mOnButtonClickListener != null)
        {

            switch (v.getId())
            {
            case R.id.on:
                startTime = SystemClock.elapsedRealtime();
                timerHandler.post(timerRunnable);
                break;
            case R.id.off:
                timerHandler.removeCallbacks(timerRunnable);
                break;

            }
        }

    }
};

如果您希望关闭按钮暂停计时器,您必须存储暂停开始时间和总暂停时间:

private OnClickListener mOnClickListener = new OnClickListener() {

    @Override
    public void onClick(View v)
    {
        if (mOnButtonClickListener != null)
        {

            switch (v.getId())
            {
            case R.id.on:
                if(paused)
                {
                     pausedTime += SystemClock.elapsedRealtime()-pauseStartTime;
                }
                else
                {
                     startTime = SystemClock.elapsedRealtime();
                }
                timerHandler.post(timerRunnable);
                break;
            case R.id.off:
                pauseStartTime = SystemClock.elapsedRealtime();
                timerHandler.removeCallbacks(timerRunnable);
                break;

            }
        }

    }
};

在你的可运行文件中:

long millis = time - startTime - pausedTime;

希望对您有所帮助

试试这个

在您的第一个按钮(开启)中粘贴此代码,在第二个按钮(关闭)中粘贴相同的代码,但不是 "i==0" 使用另一个变量

      if(i == 0){
            pauseTime =  timeSwap+= timeInMillies;
            timeMap.put(keyQuestion, pauseTime);
            keyQuestion = q1.getText().toString();
            timerStart();
            i = 1;
        }
        else if(i == 1){
            myHandler.removeCallbacks(updateTimerMethod);
            pauseTime =  timeSwap+= timeInMillies;
            timeMap.put(keyQuestion, pauseTime);
            keyQuestion = q1.getText().toString();
            timeSwap = 0L;
            timeSwap += timeMap.get(keyQuestion);
            startTime = SystemClock.uptimeMillis();
            myHandler.postDelayed(updateTimerMethod, 0);
        }

希望对您有所帮助。