android 子线程刷新view
android 子线程内不能刷新view呢?答案是可以。那么为什么我们用子线程刷新view时会抛出"Only the original thread that created a view hierarchy can touch its views."
那是因为VIew和windowManager之间的协议处理类ViewRootImpl对Thread进行了校验,
void checkThread() {
3938 if (mThread != Thread.currentThread()) {
3939 throw new CalledFromWrongThreadException(
3940 "Only the original thread that created a view hierarchy can touch its views.");
3941 }
3942 }
该方法的主要作用就是校验创建View所在的线程和当前操作view的线程是不是同一个。一般情况下ViewRootImpl都是有应用程序主线程创建的,所以子线程操作view时会抛出异常,那么只要保证创建者和操作者是同一个就可以避免避免抛出异常。ViewRootImpl对外是不公开的,那么要想子线程创建改类对象,只有通过WindowManager来创建。