本文共 2151 字,大约阅读时间需要 7 分钟。
android中的Handler类可以用来执行Runnable类的run方法,它不同于java常用的两种线程调用方法(1、将Runnable类放入Thread构造函数中,然后调用start方法执行;2、扩展Thread类,覆写run方法,并调用start方法执行),此两个方法会创建一个新的进程执行run方法,handler大部分则是在创建它的线程里直接运行run方法。
handler可以分发Message对象和Runnable对象到主线程中, 每个Handler实例,都会绑定到创建他的线程中(一般是位于主线程),
它有两个作用: (1): 安排消息或Runnable 在某个主线程中某个地方执行, (2)安排一个动作在不同的线程中执行
Handler中分发消息的一些方法
post(Runnable)//立即将Runnable中run方法代码放到当前线程(创建handler的线程)执行
postAtTime(Runnable,long)//在一定时间后将Runnable中run方法代码放到当前线程(创建handler的线程)执行
postDelayed(Runnable long)//延迟一定时间后将Runnable中run方法代码放到当前线程(创建handler的线程)执行
sendEmptyMessage(int)
sendMessage(Message)//发送一个消息给调用此方法的handler,并触发该handler的handleMessage(Message msg)方法
sendMessageAtTime(Message,long)//在某一时间发送一个消息给调用此方法的handler,并触发该handler的handleMessage(Message msg)方法
sendMessageDelayed(Message,long)//延迟一定时间后发送一个消息给调用此方法的handler,并触发该handler的handleMessage(Message msg)方法
以上post类方法允许你排列一个Runnable对象到主线程队列中,
sendMessage类方法, 允许你安排一个带数据的Message对象到队列中,等待更新,Message里可以存放各种数据,如int,Bundle等来传递数据。
public class MyHandlerActivity extends Activity { Button button; MyHandler myHandler; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.handlertest); button = (Button) findViewById(R.id.button); myHandler = new MyHandler(); MyThread m = new MyThread(); new Thread(m).start(); } /** * 接受消息,处理消息 ,此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); } } 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........"); Message msg = new Message(); Bundle b = new Bundle();// 存放数据 b.putString("color", "我的"); msg.setData(b); MyHandlerActivity.this.myHandler.sendMessage(msg); // 向Handler发送消息,更新UI } } }
转载地址:http://gysub.baihongyu.com/