CalledFromWrongThreadException:同时更改视图颜色(Android)



我正在尝试更改View的背景颜色,该颜色充当与其他声音样本一起滴答作响的正方形。

当我去运行它时,它出现错误:

ViewRootImpl$CalledFromWrongThreadException:只有创建视图层次结构的原始线程才能触及其视图。

任何人都可以提供解决方案吗?

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.act2);
    final View square = (View)findViewById(R.id.rec);
    tone = new TimerTask() {
        @Override
        public void run() {
            if (sound[0] % 4 != 0) {
                s2.start();
                sound[0] += 1;
                square.setBackgroundColor(Color.parseColor("#ff0000"));
            } else {
                s2.start();
                sound[0] = 1;
                square.setBackgroundColor(Color.parseColor("#00ff00"));
            }
        }
    };
}

代码的声音部分工作正常,只是当我尝试使用View.

改为将 UI 相关代码移动到 UI 线程。您无法更新 UI 表单计时器任务

法典:

tone = new TimerTask() {
    @Override
    public void run() {
        if (sound[0] % 4 != 0) {
            s2.start();
            sound[0] += 1;
            runOnUiThread(new Runnable() {
             @Override
                 public void run() {
                    square.setBackgroundColor(Color.parseColor("#ff0000"));
                }
            });

计时器任务中的 void run 方法位于新线程上,而不是 UI 线程上。您不能在此线程中设置背景颜色。您应该在 UI 线程中执行此操作,如下所示。

runOnUiThread(new Runnable() {
         @Override
             public void run() {
                square.setBackgroundColor(Color.parseColor("#ff0000"));
            }
        });

最新更新