- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一、Handler 的定义:
主要接受子线程发送的数据, 并用此数据配合主线程更新 UI.
解释: 当应用程序启动时,Android 首先会开启一个主线程 (也就是 UI 线程) , 主线程为管理界面中的 UI 控件,进行事件分发, 比如说, 你要是点击一个Button, Android 会分发事件到 Button 上,来响应你的操作。 如果此时需要一个耗时的操作,例如: 联网读取数据,或者读取本地较大的一个文件的时候,你不能把这些操作放在主线程中,如果你放在主线程中的话,界面会出现假死现象, 如果 5 秒钟还没有完成的话,会收到 Android 系统的一个错误提示 强制关闭. 这个时候我们需要把这些耗时的操作,放在一个子线程中,因为子线程涉及到UI 更新,Android 主线程是线程不安全的,也就是说,更新 UI 只能在主线程中更新,子线程中操作是危险的. 这个时候,Handler 就出现了来解决这个复杂的问题,由于 Handler 运行在主线程中(UI 线程中),它与子线程可以通过 Message 对象来传递数据,这个时候,Handler 就承担着接受子线程传过来的(子线程用sedMessage()方法传弟)Message 对象,(里面包含数据) , 把这些消息放入主线程队列中,配合主线程进行更新 UI。
二、Handler 一些特点
handler 可以分发 Message 对象和 Runnable 对象到主线程中, 每个
Handler 实例,都会绑定到创建他的线程中(一般是位于主线程),
它有两个作用: (1): 安排消息或 Runnable 在某个主线程中某个地方执行, (2)安排一个动作在不同的线程中执行
Handler 中分发消息的一些方法post(Runnable) postAtTime(Runnable,long) postDelayed(Runnable long) sendEmptyMessage(int) sendMessage(Message) sendMessageAtTime(Message,long) sendMessageDelayed(Message,long)
以上 post 类方法允许你排列一个 Runnable 对象到主线程队列中,
sendMessage 类方法, 允许你安排一个带数据的Message 对象到队列中, 等待更新.
三、Handler 实例
(1) 子类需要继承 Handler 类,并重写 handleMessage(Message msg) 方法, 用于接受线程数据
以下为一个实例,它实现的功能为 : 通过线程修改界面 Button 的内容
1
1 public class MyHandlerActivity extends Activity {
2
3
4
5
6
Button button;
MyHandler myHandler;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
7 setContentView(R.layout.handlertest); 8
button = (Button) findViewById(R.id.button);
myHandler = new MyHandler();
// 当创建一个新的 Handler 实例时, 它会绑定到当前线程和消息的队列中,开始分发数据
// Handler 有两个作用, (1) : 定时执行 Message 和 Runnalbe 对象
// (2): 让一个动作,在不同的线程中执行. 14
// 它安排消息,用以下方法
// post(Runnable)
// postAtTime(Runnable,long)
// postDelayed(Runnable,long)
// sendEmptyMessage(int)
// sendMessage(Message);
// sendMessageAtTime(Message,long)
// sendMessageDelayed(Message,long) 23
// 以上方法以 post 开头的允许你处理 Runnable 对象
//sendMessage()允许你处理 Message 对象(Message 里可以包含数据,) 26
MyThread m = new MyThread();
new Thread(m).start(); 29 }
30
31 /**
32 * 接受消息,处理消息 ,此 Handler 会与当前主线程一块运行33 * */
34
class MyHandler extends Han
文档评论(0)