handler
来源:互联网 发布:征服者升级软件 编辑:程序博客网 时间:2024/06/01 09:30
class MyThread implements Runnable { public void run() { try { Thread.sleep(10000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } Log.d("thread.......", "mThread........"); MyHandlerActivity.this.myHandler.post(new Runnable(){ @Overridepublic void run() {//do something}}); }}}
一、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对象到队列中,等待更新.
二、实例
子类需要继承Hendler类,并重写handleMessage(Message msg) 方法, 用于接受线程数据
<span style="font-size:10px;"> /** * 接受消息,处理消息 ,此Handler会与当前主线程一块运行 * */ class MyHandler extends Handler { public MyHandler() { } public MyHandler(Looper L) { super(L); } // 子类必须重写此方法,接受数据 @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub Log.d("MyHandler", "handleMessage......"); super.handleMessage(msg); // 此处可以更新UI Bundle b = msg.getData(); String color = b.getString("color"); MyHandlerActivity.this.button.append(color); } }</span>
在其他线程中调用handler的send类方法
<pre name="code" class="java" style="font-family: Verdana, Helvetica, Arial, sans-serif;">class MyThread implements Runnable { public void run() { try { Thread.sleep(10000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } Log.d("thread.......", "mThread........");
<span style="white-space:pre"></span> Message msg = new Message(); Bundle b = new Bundle();// 存放数据 b.putString("color", "我的"); msg.setData(b); MyHandlerActivity.this.myHandler.sendMessage(msg); // 向Handler发送消息,更新UI<p><span style="white-space:pre"></span>}</p>
}在其他线程中调用handler的post方法
class MyThread implements Runnable { public void run() { try { Thread.sleep(10000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } Log.d("thread.......", "mThread........"); MyHandlerActivity.this.myHandler.post(new Runnable(){ @Overridepublic void run() {//do something}}); }}}
参考资料:http://www.2cto.com/kf/201312/262268.html
http://www.pin5i.com/showtopic-android-handler.html
0 0
- Handler
- Handler
- Handler
- handler
- handler
- Handler
- Handler
- Handler
- Handler
- Handler
- Handler
- handler
- Handler
- handler
- handler
- Handler
- Handler
- Handler
- Java的日期格式化常用方法
- 【翻译自mos文章】注意: ASMB process exiting due to lack of ASM file activity
- cocos2dx 3.1.1学习笔记 中文字符的使用
- uva 591(数学)
- 有些东西你就是记不住——一句话网络
- handler
- RaspberryPi 安装LNMP
- poj 3744 Scout YYF I(矩阵快速幂+概率dp)
- UVA846 Steps
- 几种常见web 容器比较 (tomcat、 jboss 、resin、 weblogic、 websphere、 glassfish)
- 技巧:Vim 的纵向编辑模式
- HashSet集合是如何保证元素的唯一性的?
- 工作伊始
- TheOldReader