上周一直在忙HYB项目的单元测试,在一次测试过程中,遇到了ViewRoot$CalledFromWrongThreadException异常,很是困惑.
上网查找资料,翻阅sdk文档,再加上自己的一些处理,问题得到解决.和大家分享分享心得.
ViewRoot$CalledFromWrongThreadException details:android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
大概意思就是:只有原始创建这个视图层次的线程才能修改它的视图,换句话说也就是必须在程序的主线程(UI线程)中更新界面的显示工作.
从网上看到的一段描述,感觉描述的还不错:
在一个Android程序运行的时候,会单独启动一个Process,在默认的情况下,所有这个程序的Activity或者是Service等其他组件都会跑在这个Process中,一个Android程序默认情况下只有一个Process,但是一个Process中允许有多个Thread.在这么多的Thread中,有一种Thread称其为UI Thread,UI Thread在android程序运行的时候就被创建,是一个Process中的主线程Main Thread,顾名思义主要就是负责UI界面的显示、更新、以及与控件的交互.在Android程序创建之初,是一种单线程模型,所有的任务都在一个线程中运行,因此我们认为UI Thread执行的每一个函数时间都应该越短越好,耗时的操作尽可能的交给子线程去做,以免阻塞主线程.
言归正传:在我的单元测试中这个问题是怎么解决的呢?
我在tearDown()方法里面,将所有的Widget的clearFocus()方法都给移除了.
结果绿色通过条亮起.如下图所示:
2011.10.20.pm
jack.li
QQ:523072842
Email:523072842@qq.com