handler.postDelayed无法正常工作

问题描述 投票:0回答:1

我有一个简单的秒表代码段。线程在自定义类中运行,它通过“接口”>连接到主活动

public class MainActivity extends AppCompatActivity implements MainActivityInteractionInterface{

public static boolean isRunning = false;
Stopwatch stopWatch;
private TextView textViewMilliSeconds;
private TextView textViewSeconds;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    textViewMilliSeconds = findViewById(R.id.textViewStopwatchMilliseconds);
    textViewSeconds = findViewById(R.id.textViewStopwatchSeconds);

    stopWatch = new Stopwatch(this, getApplicationContext());
    stopWatch.runThread();
}

@Override
public void updateUI() {
    String time = String.format(Locale.getDefault(), "%03d", stopWatch.getMilliseconds());
    textViewMilliSeconds.setText(time);

    String timeSeconds = String.format(Locale.getDefault(), "%02d", stopWatch.getSeconds());
    textViewSeconds.setText(timeSeconds);
}

public void startTimer(View view) {
    isRunning = !isRunning;
}

public class Stopwatch {
private int milliseconds = 0;
private int seconds = 0;

public int getMilliseconds() {
    return milliseconds;
}

public int getSeconds() {
    return seconds;
}

private MainActivityInteractionInterface interactionInterface;
private Context applicationContext;

public Stopwatch(MainActivityInteractionInterface interactionInterface, Context applicationContext){
    this.interactionInterface = interactionInterface;
    this.applicationContext = applicationContext;
}

public void runThread(){
    final Handler handler = new Handler();
    handler.post(new Runnable(){
        @Override
        public void run(){
            if(isRunning) {
                milliseconds++;
                if (milliseconds == 1000) {
                    milliseconds = 0;
                    seconds++;
                    if(seconds == 60){
                        seconds = 0;
                    }
                }
            }
            interactionInterface.updateUI();
            handler.postDelayed(this, 1);
        }
    });
}

处理程序应每1毫秒更新一次,如果有1000毫秒,则经过1秒钟如果我将handler.postDelayed延迟设置为15到1000毫秒,则需要18秒,为什么?

我有一个简单的秒表代码段。线程在自定义类中运行,它通过接口公共类连接到主要活动MainActivity扩展了AppCompatActivity的实现...

java android android-handler
1个回答
0
投票

handler.postDelayed(this, 1);的第二个参数

© www.soinside.com 2019 - 2024. All rights reserved.