1

我试图在活动出现时自动启动一个简单的计时器。目前,在我的操作完成之前,活动不会明显加载。我应该覆盖另一种方法吗?

@Override
protected void onStart() {
    super.onStart();
    for (int i = 0; i <= 100; i++) {
        ((TextView) findViewById(R.id.timer)).setText(String.valueOf(i));
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
            Log.e("timer", e.getMessage());
        }
    }
}
4

3 回答 3

2

您正在阻塞主线程,请改用带有 Runnable 的 Handler

handler = new Handler();

final Runnable r = new Runnable() {
    public void run() {
        tv.append("Hello World");
        handler.postDelayed(this, 1000);
    }
};

handler.postDelayed(r, 1000);
于 2018-10-22T05:52:58.563 回答
1

暂停当前​​线程以创建计时器是一个非常糟糕的主意。CheckOutTimer类并查看该类中的方法并从循环中scheduleAtFixedRate()提取((TextView) findViewById(R.id.timer))出来。for

看看 How to set a Timer in Java?

于 2018-10-22T05:55:54.510 回答
1

当活动在 onStart() 中运行时,您可能会看到部分布局,而不是全部布局。也许您可以覆盖 onWindowFocusChanged() 方法,然后启动一个线程。为什么你在 onStart() 中使用 'super.onResume()'?我不明白:)

于 2018-10-23T00:47:03.010 回答