您的位置:首页 > 移动开发 > Android开发

android 子线程刷新view

2016-04-29 11:14 447 查看
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来创建。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: