子线程中更新UI不报错问题

public class MainActivity extends Activity {
    private TextView textview;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        textview= (TextView) findViewById(R.id.textview);

        new MyThread().start();
    }
    public class MyThread extends Thread{
        @Override
        public void run() {
            textview.setText("子线程修改的");
        }
    }

}

程序正常运行。

为什么在onCreate里面能够启动非线程更新UI呢,那是因为onCreate时候,viewRoot还没有被创建,所以没法执行检查

void checkThread() {
        if (mThread != Thread.currentThread()) {
            throw new CalledFromWrongThreadException(
                    "Only the original thread that created a view hierarchy can touch its views.");
        }
    }

那么在什么时候viewRoot会被创建呢,答案是执行onResume后,viewRoot就能创建好,这个时候就会执行UI线程检查了,所以在onCreate->onStart->onResume中都可以在子线程中更新UI。

参考博文http://www.cnblogs.com/yydcdut/p/3864072.html

猜你喜欢

转载自blog.csdn.net/wb1211/article/details/52092860