Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面

2014-11-24 11:36:38 来源: 作者: 浏览: 1

概述:每个Android应用程序都运行在一个dalvik虚拟机进程中,进程开始的时候会启动一个主线程(MainThread),主线程负责处理和ui相关的事件,因此主线程通常又叫UI线程。而由于Android采用UI单线程模型,所以只能在主线程中对UI元素进行操作。如果在非UI线程直接对UI进行了操作,则会报错:


CalledFromWrongThreadException:only the original thread that created a view hierarchy can touch its views


Android为我们提供了消息循环的机制,我们可以利用这个机制来实现线程间的通信。那么,我们就可以在非UI线程发送消息到UI线程,最终让Ui线程来进行ui的操作。



对于运算量较大的操作和IO操作,我们需要新开线程来处理这些繁重的工作,以免阻塞ui线程。


例子:下面我们以获取CSDN logo的例子,演示如何使用Thread+Handler的方式实现在非UI线程发送消息通知UI线程更新界面。


ThradHandlerActivity.java:


main.xml布局文件:


strings.xml


Manifest.xml:


运行结果:







为了不阻塞ui线程,我们使用mThread从网络获取了Linux公社的LOGO


,并用bitmap对象存储了这个Logo的像素信息。




此时,如果在这个线程的run()方法中调用


会出现:CalledFromWrongThreadException:only the original thread that created a view hierarchy can touch its views。原因是run()方法是在新开的线程中执行的,我们上面提到不能直接在非ui线程中操作ui元素。


-->

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: