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来创建。
posted @ 2016-04-29 11:15  清澈见底  阅读(195)  评论(0编辑  收藏  举报