我有一个必须不断更新的UI组件。我尝试将更新过程添加到UI线程,如下所示:
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
while(true) {
speedometer.setValue((int) speed);
}
}
});
但这导致应用程序冻结。为什么会这样?
答案 0 :(得分:0)
由getActivity().runOnUiThread
引起的问题基本上说“在主UI线程中执行内部运行功能。”
使用下一个代码在活动内部而不是在UI线程上创建新线程。
Thread thread = new Thread() {
@Override
public void run() {
try {
while(true) {
speedometer.setValue((int) speed);
handler.post(this);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
thread.start();
答案 1 :(得分:0)
你不想在UI线程上运行它 - 它会永远阻止。您在UI线程上运行无限循环,从而阻止它执行任何其他工作。实际上需要在UI线程上运行的唯一部分是实际更新UI本身的部分。让它在后台线程上运行,只在您实际进行更新时调用RunOnUIThread。
顺便说一下,你为什么要连续做这个过程? (如果我没记错的话,你可以在大约20毫秒左右的时间内逃脱它对人眼的感知,所以没有必要经常进行更新。