设为首页 加入收藏

TOP

Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面
2014-11-24 11:36:38 来源: 作者: 【 】 浏览:0
Tags:Android 异步 处理 使用 Thread Handler 实现 线程 更新 界面

概述:每个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元素。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇分析Android SDK自带的输入法项目 下一篇Android异步处理系列文章索引

评论

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

·求navicat for mysql (2025-12-26 13:21:33)
·有哪位大哥推荐一下m (2025-12-26 13:21:30)
·MySQL下载与安装教程 (2025-12-26 13:21:26)
·Linux_百度百科 (2025-12-26 12:51:52)
·Shell 流程控制 | 菜 (2025-12-26 12:51:49)