mThread是主线程,在应用程序启动的时候,被初始化。
在访问UI的时候,ViewRoot会去检查那个线程访问UI,如果不是主线程,则会抛出异常。
@Override
public void requestLayout() {
if (!mHandlingLayoutInLayoutRequest) {
checkThread();
mLayoutRequested = true;
scheduleTraversals();
}
}
上面是requestLayout()的源码。
分析可以得出结论:
CheckThread()方法用来判断是否为主线程,不是的话抛出异常。
void checkThread() {
if (mThread != Thread.currentThread()) {
throw new CalledFromWrongThreadException(
"Only the original thread that created a view hierarchy can touch its views.");
}
}
但是这个方法会在onResume 之后调用。