gpt4 book ai didi

android - 使用计时器更新 GUI : why it doesn't work?

转载 作者:行者123 更新时间:2023-11-29 18:25:06 24 4
gpt4 key购买 nike

我正在创建一个视频录制应用程序,我用标签 txtStatustxtTime 覆盖了视频预览。

相机按钮启动/停止定时调用 UpdateGUI 方法的定时器。运行调试我可以看到计时器正在工作 - 它每秒调用 updateGUI 方法,但该方法不会更新控件。

如果我能得到任何关于如何解决这个问题的提示,我将不胜感激。

代码如下:

这是激活定时器的方法:

private void startTimer()
{
updateTimer = new Timer("TimerUpdate");
updateTimer.scheduleAtFixedRate(new TimerTask(){
public void run(){
settings.IncreaseRecordingTime();
updateGUI();

}
}, 0, 1000);
}

这是 updateGUI 方法:

private void updateGUI()
{
setStatusLabel();
String strTime = settings.GetTimerString(); //strTime changes every second (it works as expected)
txtTimer.setText(strTime);//the text doesn't change!
}

这是按下按钮时调用的方法:

private boolean onCaptureButton()
{
settings.CaptureAction();
videoPreview.setFrameCallback(settings);
updateGUI();//here the function updateGUI() works as expected - it changes the txtStatus text from "Preview" to "Recording"
setTimer();
return false;
}

我也添加了一些注释(不知道为什么 updateGUI()onCaptureButton() 方法中调用时有效,而在内部调用时无效计时器方法)。

最佳答案

计时器在计时器线程上运行。您应该只从 UI 线程更新 GUI。有几种方法可以做到这一点。最简单的之一是 AsyncTasks或将事件发布到 UI 处理程序。一些函数在非 GUI 线程上调用时可以工作,但没有很好的记录。我从未见过刷新功能。我一直使用 invalidate(UI 线程)或 postInvalidate(后台线程)。不过,我认为 setText 在内部调用了它。

关于android - 使用计时器更新 GUI : why it doesn't work?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/986364/

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