为什么我能够从后台线程操作UI元素?

时间:2012-01-05 18:58:30

标签: android

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    mTextView = (TextView) findViewById(R.id.text);

    new Thread(new Runnable() {
        @Override
        public void run() {
            mTextView.setText("Hello");
        }
    }).start();

但是,如果我为线程添加延迟它不起作用。所以我可以从非UI线程操纵UI元素。任何人都可以为我澄清这种情况吗?     }

2 个答案:

答案 0 :(得分:3)

Android实际上并没有阻止您从主线程外部更新UI。这只是一个滴答作响的定时炸弹。如果主UI线程当时没有更新UI,那么你的线程就可以做到。没有办法控制它何时会发生在SurfaceView之外。

至少那是我的理解。我不是100%肯定知道,但我已经(不小心)从主UI线程之外更新UI。有时它会起作用,有时也不行,所以我认为它是某种形式的ConcurrentModificationException。

答案 1 :(得分:1)

不,如果您正在操作UI元素,则必须从主线程执行此操作。