A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 冯超 高级黑马   /  2013-8-30 12:19  /  1000 人查看  /  3 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

                                                                                          

Handler分析


Handler的定义:
          主要接受子线程发送的数据, 并用此数据配合主线程更新UI.


最近做一个网络图片查看器的时候,遇到许多困难,于是有了Handler这个分析总结。

为什么要用他?

大家都知道在public static void main(String[] args){}中写程序直接run application就可以运行,这个是java中的主线程,但是有的时候并不是所用东西都能在主线程中运行的,有的时候联网读取数据,或者读取本地较大的一个文件的时候,你不能把这些操作放在主线程中,如果你放在主线程中的话,界面会出现假死现象,机子会卡死.  这个时候我们需要把这些耗时的操作,放在一个子线程中。大家买票也是,现在买票分为好多中了,楼主今年去上海,是用的传统方式排队买票登的急死人了,回来的时候是在网上买的票直接在电脑上面取,方便多了。可以理解为排队是主线程,网上买书子线程,当所有人的东西都聚集在主线程时候,机器就会瘫痪,所以会用到子线程。

Handler是在主线程中的,为了使用子线程中的数据还需要一个Message这个类的帮助。

接下来说下流程:

第一步:

//1创建消息处理器,继承里面的handleMessage方法


  1. <P style="LINE-HEIGHT: 30px; TEXT-INDENT: 2em" align=left> </P>
复制代码
  1. private Handler hanler = new Handler() {

  2. @Override
  3. public void handleMessage(Message msg) {
  4. // TODO Auto-generated method stub
  5. if(msg.what == 1) {
  6. String str = (String) msg.obj;
  7. et.setText(str);
  8. Toast.makeText(MainActivity.this, str, 0).show();
  9. }
  10. else {
  11. Toast.makeText(MainActivity.this, "匹配不成功", 0).show();
  12. }

  13. }

  14. };
复制代码
第二步:
  1. //2.定义一个子线程
  2. final String str = "处理成功";
  3. new Thread() {
  4. public void run() {
  5. //如果不备注则会报错 Toast.makeText(MainActivity.this, "子线程已经启动", 0).show();
  6. //3.创建一个Message
  7. Message message = new Message();
  8. message.what = 1;
  9. message.obj = str;
  10. //4hanler调用sendMessage放入message方法
  11. hanler.sendMessage(message);
  12. }
  13. }.start();
  14. }
复制代码
解释:message.what = 1; 相当于定义规则
          message.obj = str;相当于讲子线程中的数据存在Object中(message.obj 返回的是一个object类型,可以是数组,对象,集合等)。
子线程的启动:new Thead() {
                         public void run() {}
                       }.start();                                                                                                                                                                  

photo.jpg (43.36 KB, 下载次数: 8)

photo.jpg

评分

参与人数 1技术分 +1 收起 理由
特殊服务 + 1

查看全部评分

3 个回复

倒序浏览
虽然没接触过这个Handler,只知道InvocationHandler,不过感觉资料写的比较清晰明了,赞一个
回复 使用道具 举报
吴光新 发表于 2013-8-30 17:04
虽然没接触过这个Handler,只知道InvocationHandler,不过感觉资料写的比较清晰明了,赞一个 ...

谢谢··排版不好看
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马