【问题标题】:I have an error in a thread making time "run" (update every second)我在线程制作时间“运行”时出错(每秒更新一次)
【发布时间】:2018-01-18 14:50:05
【问题描述】:

这是我的代码:

public void run() {
        try {
            while (!isInterrupted()) {
                Thread.sleep(1000);
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {

                    }
                });
            }
        } catch (InterruptedException e) {
        }
    }
};
thread.start();

Thread 称为 Thread,我想在称为 TextViewTextView 中显示时间。 Thread 中存在一些错误,因为即使时间显示在 TextView 中,它也不会每秒更新。谢谢

【问题讨论】:

  • 你试过调试吗?事实上,这个问题很难回答。
  • 改用Handler
  • @NejsemNikdo 检查有关使用 Handler 的答案:stackoverflow.com/a/32640896/3965050
  • @f1sh,我认为问题在于第 8 行中的“更新 textview”(public void run() { //here }。但我对此不确定,此外我不知道如何“更新 textview” "

标签: java android handler ui-thread


【解决方案1】:

如上所述,您应该使用HandlerRunnable,下面是您的代码示例:

final Handler handler = new Handler();
final Runnable task = new Runnable() {
    @Override
    public void run() {
        //Your code
        handler.postDelayed(this, 1000);
    }
};
handler.postDelayed(task, 1000);

有关处理程序的更多信息,in the doc.

【讨论】:

  • 它在第一个handler.postDelayed(task, 1000)(在我的代码下)中的task 上显示错误“变量'任务'可能没有被初始化”
  • 谢谢,现在它没有显示错误,但我的应用程序中的时钟仍然没有运行:(
  • @NejsemNikdo 您能否更新问题中的完整代码?请把它填满,因为这应该可行。
【解决方案2】:

使用RunnableHandler

Runnable runnable = new Runnable() {
    @Override
    public void run() {

        Date time = Calendar.getInstance().getTime();
        textView.setText(DateFormat.format("hh:mm", time));

        handler.postDelayed(this, 1000);
    }
};

Handler handler = new Handler();
handler.post(runnable);

【讨论】:

  • 检查他是否开始休眠线程,所以第一篇文章也应该延迟。
  • 我认为他这样做是为了让任务每秒执行一次,而不是他想让它延迟
  • 是的,当然可以,但是他可以在他的代码执行之后把睡眠,把它放在开头也只是为了延迟第一次执行(也许他在TextView中放了一些数据已经?,谁知道...)。但话又说回来,也许这只是一个错误。只是一个观察。
猜你喜欢
  • 1970-01-01
  • 2021-05-10
  • 2020-08-28
  • 2022-08-20
  • 2018-02-18
  • 1970-01-01
  • 2013-10-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多