gpt4 book ai didi

java - 更新主线程不起作用

转载 作者:搜寻专家 更新时间:2023-11-01 08:47:09 25 4
gpt4 key购买 nike

我只想在延迟 2 秒的循环中显示每次迭代的值。

当我运行代码时,主线程卡住,一段时间后只显示 tv_t1: 19 的值。

任何人都可以让我知道下面发布的代码中有什么错误或我遗漏了什么吗?

注意:

我想在主线程上这样做。

*代码

tv_t1 = (TextView) findViewById(R.id.tv_t1);
tv_t2 = (TextView) findViewById(R.id.tv_t2);

for(int i = 0; i < 20; i++) {
tv_t1.setText("t1:" + i);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

最佳答案

Thread是Android的main/UI线程,设置sleep(value)会导致主线程 hibernate 或在预定的时间停止工作。如果你想更新main UIsleep一段时间,最好创建一个新的thread然后创建Runnable 覆盖 Run() 的对象。在 Run() 中,您可以调用耗时的函数,也可以让您创建的新 thread 进入 sleep 而不是强制UI threadsleep,这将导致所有主要的 UI 元素卡住。下面代码中的Handler作为threadmessage queue的中间层,你也可以替换h1使用您的 tv_1 将其作为消息发布到队列中,然后更新您的 View 。

请尝试下面的代码:

Handler h1 = new Handler();
Thread t1;

t1 = new Thread(new Runnable() {

@Override
public void run() {
// TODO Auto-generated method stub
try {
loop();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
t1.start();


protected void loop() throws InterruptedException {
// TODO Auto-generated method stub
for (i = 0; i < 20; i++) {
t1.sleep(2000);
h1.post(new Runnable() {

@Override
public void run() {
// TODO Auto-generated method stub
tv_t1.setText("tv_1: " + i);
}
});
}
}

关于java - 更新主线程不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27089181/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com