Handler-简介和用法
来源:互联网 发布:淘宝网店童装图片 编辑:程序博客网 时间:2024/06/05 02:16
Handler——简介和用法
Handler中常用的四个方法:
sendMessage(Message msg)
sendMessageDelayed(Message msg, long delayMillis)
post(Runnable r)
postDelayed(Runnable r, long delayMillis)Handler中的message queue和javascript中的event queue的机制是一样的。
handler中post传入的Runnable对象中的run方法其实是在UI线程(主线程)中被执行的,这个就是使用了Handler的第二个作用:将action传入到message queue中,然后使得action被别的线程所执行。
Handler handler = new Handler(); // 创建Handler对象
通过Handler在自定义的子线程中更新UI,否则会抛出异常的。我们可以自己在UI线程之上再创建线程,然后我们需要通过Handler来使得我们的线程和UI线程通信。这样我们才能在我们的子线程中更新UI。因为Android中UI的更新只能在UI线程中进行。我们只能通过Handler的通信来使得我们从子线程中更新UI。
从上面的介绍我们知道,一个Handler实例其实绑定了一个关联的thread线程和那个线程的message queue;handler会讲message和runnable对象发送到它所关联的message queue中去,同时它也会执行从message queue中出来的message和runnable。
Handler的两大用途:1. 在未来某个时间点执行message和runnable对象;2. 将要执行的action放到message queue中去,然后使得另外的不同的线程可以执行这个action。
使用Handler的sendMessage()和handleMessage()
- handleMessage()
private Handler handler = new Handler() {public void handleMessage(android.os.Message msg) {mTextView.setText("" + msg.arg1);};};
主线程中新建一个Thread发送message给主线程。
new Thread() {public void run() {Message message = handler.obtainMessage();message.arg1 = 88;handler.sendMessage(message);};}.start();
- 移除runnable对象
对应于handler.postDelayed(myRunnable, 2000);
直接handler.removeCallbacks(myRunnable); - 截获message
在创建handler对象时,调用new Handler(Callback callback)方法。
private Handler handler = new Handler(new Callback() {public boolean handleMessage(Message msg) {return true; //return true就截获,return false不截获}}){public void handleMessage(Message msg) {}};
在主线程中执行handler.sendEmptyMessage(1)。其原理:
当Handler收到message时,新创建的Callback将首先执行,其handleMessage()将会处理消息;如果Callback的handleMessage()不截获消息,然后Handler才可能会收到消息。Handler的Callback用法。如果return true,则说明message被截获,下面的handleMesage方法将不会被执行。
1、使用Handler在子线程中向ui线程发送一个消息进行UI的更新;
2、创建一个Message; Message msg = new Message(); msg.arg1=88;
3、handler.sendMessage(msg); // 最终导致同一个handler对象的handleMessage()方法被创建Handler对象的线程(一般在主线程中创建)回调,然会这个传入的msg会被当成参数传给handleMessage()方法的。这个时候我们就可以对Message对象做一些处理了,而且这个时候我们所处的线程一般就在UI线程中了,所以这个时候我们更新UI就没有问题了。
msg.obj=xxx; 可以传递一个对象;
4、复用系统的message对象 Message msg = handler.obtainMessage(); // or Message.obtain();
msg.sendtoTarget(); 也可以发送到Handler对Message进行处理
handler.removeCallbacks(Runnable r);
如前面所说,我们除了在Handler对象的handleMessage()方法中处理Message对象,还可以在Handler对象创建的时候传入一个Callback对象,用这个Callback对象来处理Message对象;注意:callback接口中handleMessage(Message msg)中若截获则一定返回true;
- Handler-简介和用法
- Handler的基本用法和原理简介
- Handler机制详述1---Handler的简介和用法
- Handler用法简介
- Android 系统Handler用法简介
- Android 系统Handler用法简介
- Android 系统Handler用法简介
- Android Handler简介及其用法
- handler中的handler.removecallbacks和handler.removemessages的用法
- android handler和AsyncTask用法
- handler和postInvalidate用法示例
- android示例之HandlerThread和Handler简介
- handler 简介
- Handler简介
- android Handler 的作用和用法
- Handler+Thread和HandlerThread的用法比较
- Handler+Thread和HandlerThread的用法比较
- Android中Handler的意义和用法
- 星系模拟器开发日志(一) 如何科学地用C++画图
- C++11中变量初始化方法汇总
- hdu1166线段树
- 基于CAS实现单点登入
- 模板
- Handler-简介和用法
- 28335硬件教程-存储器空间
- tableView的编辑
- play frameword 连接数据库, 查询数据。简单的表单提交
- 经典同步问题(二)---哲学家就餐问题
- main函数中通过使用Person类和AddressBook类,创建对象、调用方法,实现以下8个功能
- mapreduce的二次排序 SecondarySort
- 手机端缩放控制
- 深入集合框架之CopyOnWriteArrayList源码剖析