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("子线程修改的");
}
}
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