Handler

 Handler是Android消息模型最重要的一个组件,使用它可以在线程之间相互发送消息,实现线程之间的通信。处理使用Handler发送消息以外,通常需要继承Handler类,并重写handleMessage(Message msg) 方法, 接收消息并处理消息。

下面通过一个实例来说明Handler的使用方法。例子的主要功能是:通过线程修改界面Button的内容,完整的代码如下:


注意:用Handler的obtainMessage方法获得的Message可以省去创建Message的空间开销


01 public class MyHandlerActivity extends Activity {
02  
03     Button button;
04     MyHandler myHandler;
05  
06     protected void onCreate(Bundle savedInstanceState) {
07         super.onCreate(savedInstanceState);
08         setContentView(R.layout.handlertest);
09         button = (Button) findViewById(R.id.button);
10         myHandler = new MyHandler();
11         // 当创建一个新的Handler实例时, 它会绑定到当前线程和消息的队列中,开始分发数据
12         // Handler有两个作用,
13            //(1) : 定时执行Message和Runnalbe 对象
14         // (2): 让一个动作,在不同的线程中执行.
15         // 它安排消息,用以下方法
16         // post(Runnable)
17         // postAtTime(Runnable,long)
18         // postDelayed(Runnable,long)
19         // sendEmptyMessage(int)
20         // sendMessage(Message);
21         // sendMessageAtTime(Message,long)
22         // sendMessageDelayed(Message,long)
23         // 以上方法以 post开头的可以处理Runnable对象
24         //sendMessage()可以处理Message对象(Message里可以包含数据,)
25         MyThread m = new MyThread();
26         new Thread(m).start();
27     }
28  
29     /**
30     * 接受消息,处理消息 ,此Handler会与当前主线程一块运行
31     * */
32     class MyHandler extends Handler {
33         
34            //默认构造函数
35            public MyHandler() {
36                   super();
37         }
38          
39            // 带有Looper参数的构造函数
40            public MyHandler(Looper L) {
41             super(L);
42         }
43         // 子类必须重写此方法,处理消息
44         @Override
45         public void handleMessage(Message msg) {
46             Log.d("MyHandler""handleMessage......");
47             super.handleMessage(msg);
48             // 此处可以更新UI
49             Bundle b = msg.getData();
50             String color = b.getString("color");
51                    String btn = msg.obj.toString();
52             MyHandlerActivity.this.button.append(color + btn);
53         }
54     }
55  
56     class MyThread implements Runnable {
57         public void run() {
58             try {
59                 Thread.sleep(2000);
60             catch (InterruptedException e) {
61                 // TODO Auto-generated catch block
62                 e.printStackTrace();
63             }
64             Log.d("thread.......""mThread........");
65                    // 使用Message能够传递多种数据具体可以参考Message的源码
66                    // 最常用的可以使用Message的obj对象在线程之间传递对象数据
67             Message msg  =  new Message();
68             Bundle b = new Bundle();// 存放数据
69             b.putString("color""Red");
70             msg.setData(b);
71                    msg.obj = new String(“Button”);
72             MyHandlerActivity.this.myHandler.sendMessage(msg); // 向Handler发送消息,更新UI
73         }
74     }
75 }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值