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进行了校验,
该方法的主要作用就是校验创建View所在的线程和当前操作view的线程是不是同一个。一般情况下ViewRootImpl都是有应用程序主线程创建的,所以子线程操作view时会抛出异常,那么只要保证创建者和操作者是同一个就可以避免避免抛出异常。ViewRootImpl对外是不公开的,那么要想子线程创建改类对象,只有通过WindowManager来创建。
那是因为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来创建。
相关文章推荐
- Android 自定义 RatingBar (评分控件)
- Android适配不同屏幕
- Android蓝牙通信开发总结
- android存储空间的分类
- Android之Socket群组聊天
- 自定义view之柱状图
- android学习笔记—AIDL的使用步骤
- Android-实时将下载图片加入相册中
- Android之Sensor 简介
- Android自定义View之圆形ImageView--RoundImageView
- Android Fragment的三种应用方式
- hjr-Android:关于Log
- Android四大布局之表格布局行列位置控制
- Android中service
- android:padding和android:margin的区别
- Android 常用抓包工具介绍之Charles
- android基础学习之popupwindow
- Android TextView边框和背景,以及圆形背景
- Android 常用抓包工具介绍之Charles
- Android Studio安装过程问题汇总