Android TextView setText在ScheduledExecutorService runOnUiThread内部不工作
代码: 我想每1秒更新一次TextView中的文本,但这似乎只适用于第一次,以后不会更新文本 有人知道问题出在哪里吗Android TextView setText在ScheduledExecutorService runOnUiThread内部不工作,android,textview,scheduledexecutorservice,android-runonuithread,Android,Textview,Scheduledexecutorservice,Android Runonuithread,代码: 我想每1秒更新一次TextView中的文本,但这似乎只适用于第一次,以后不会更新文本 有人知道问题出在哪里吗 private void startTimer() { final ScheduledExecutorService scheduleTaskExecutor = Executors.newScheduledThreadPool(1); scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() {
private void startTimer() {
final ScheduledExecutorService scheduleTaskExecutor = Executors.newScheduledThreadPool(1);
scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
runOnUiThread(new Runnable() {
public void run() {
int count = 60;
time.setText(count - 1 + "");
count--;
}
});
}
}, 0 , 1000, TimeUnit.MILLISECONDS);
}
您可以使用处理程序
处理程序允许您发送和处理消息和可运行对象
与线程的MessageQueue关联。每个处理程序实例都是
与单个线程和该线程的消息队列关联。什么时候
创建新的处理程序后,它将绑定到的线程/消息队列
创建它的线程--从那时起,它将交付
将消息和可运行项添加到该消息队列,并在它们运行时执行它们
从消息队列中出来
您需要使用handler.postDelayed(new Runnable()
方法
使可运行的r添加到消息队列中,以运行
经过指定的时间后。将运行runnable
此处理程序附加到的线程上
阅读
您可以使用处理程序
处理程序允许您发送和处理消息和可运行对象
与线程的MessageQueue关联。每个处理程序实例
与单个线程和该线程的消息队列关联。当
创建新的处理程序后,它将绑定到的线程/消息队列
创建它的线程--从那时起,它将交付
将消息和可运行项添加到该消息队列,并在它们运行时执行它们
从消息队列中出来
您需要使用handler.postDelayed(new Runnable()
方法
使可运行的r添加到消息队列中,以运行
经过指定的时间后。将运行runnable
此处理程序附加到的线程上
我想每1秒更新一次TextView中的文本,
为什么不使用Handler.postDelayed?我想每1秒更新一次,持续60秒,这似乎是一个很好的例子,您可以检查我的答案:)sry伙计们我的错,我给了int count=60;在运行中,它总是显示59我想每1秒更新TextView中的文本,
为什么不使用Handler.postdayed?我想它每1秒更新一次,持续60秒,这似乎是一个合适的例子,你可以检查我的答案:)sry伙计们我的错,我给了int count=60;内部运行,所以它总是显示59@downvoter上面的代码工作正常,你能告诉我为什么要投否决票吗?@上面的代码工作正常,你能告诉我为什么要投否决票吗?我已经搜索了很长时间,这是我能找到的解决我问题的唯一有效方法。@iTadreik很高兴听到这个消息!“我已经寻找了很长时间,这是我能找到的解决问题的唯一有效方法。”iTadreik很高兴听到这个消息!
int count = 60;
private void startTimer() {
final ScheduledExecutorService scheduleTaskExecutor = Executors.newScheduledThreadPool(1);
scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
runOnUiThread(new Runnable() {
public void run() {
if(count > 0){
time.setText(count - 1 + "");
count--;
}
}
});
}
}, 0 , 1000, TimeUnit.MILLISECONDS);
}
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
// Add your code Here
handler.postDelayed(this, 1000); // You can change your time
}
}, 900);