• 背景

    小编昨晚跟同学聊了很久,了解到其面试中的困惑,每当被问handler机制时就不知道怎么去说,哪怕他知道handler的作用。在这里呢,小编就用案例的形式带你深入了解handler。

  • 案例

    异步加载图片,在网上随便找了一张图片地址http://p1.so.qhmsg.com/t01e2b20000369dbd11.jpg

    网上找的图片

  • 核心代码

    handleMessage方法运行在主线程;
    主线程创建时,消息队列和轮询器对象就会被创建;
    主线程中有一个消息轮询器looper,不断检测消息队列中是否有新消息,如果发现有新消息,自动调用此方法,注意此方法是在主线程中运行的;

        Handler handler=new Handler(){ @Override    public void handleMessage(Message msg) { switch (msg.what){   //7.把位图对象显示至imageview      case 1:    iv.setImageBitmap((Bitmap) msg.obj); break; case 2:  Toast.makeText(MainActivity.this,"请求失败!",Toast.LENGTH_SHORT).show(); break;}}};

因为网络交互属于耗时操作,如果网速很慢,代码会阻塞,所以网络交互的代码不能运行在主线程;
在子线程中往消息队列里发消息

new Thread(){
@Override
public void run() {try {//1.下载图片确定网址,将网址封装成url对象URL url = new URL("http://p1.so.qhmsg.com/t01e2b20000369dbd11.jpg");//2.获取客户端与服务器连接对象,此时还没有建立连接HttpURLConnection conn = (HttpURLConnection) url.openConnection();//3.对连接对象进行初始化conn.setRequestMethod("GET");//连接方式conn.setConnectTimeout(3000);//连接超时conn.setReadTimeout(3000);//读取超时//4.发送请求,与服务器建立连接conn.connect();//响应码=200,说明请求成功if (conn.getResponseCode()==200){//5.获取服务器响应头里的流,流中的数据就是请求端的数据InputStream is = conn.getInputStream();//6.读取数据流里的数据,构造成位图对象Bitmap bitmap = BitmapFactory.decodeStream(is);Message msg=handler.obtainMessage();//消息对象可以携带数据msg.obj=bitmap;msg.what=1;//把消息发送至主线程的消息队列handler.sendMessage(msg);}else {Message msg = handler.obtainMessage();msg.what=2;handler.sendMessage(msg);}} catch (Exception e) {e.printStackTrace();}
}}.start();
  • 编译后截图

手机截图

  • 总结

    其实handler机制很简单,一般就是用于主线程跟子线程之间的通信。比如,子线程不能更新UI,那么通过handler的sendMessage( )发送消息给主线程,而主线程在创建时,Message Queue(消息队列)和looper(轮询器对象)就会被创建,message就会放在Message Queue里,而Looper一旦发现Message Queue中有消息,就会把消息取出,然后把消息扔给Handler对象,Handler会调用自己的handleMessage方法来处理这条消息。

一分钟理解handler机制相关推荐

  1. android Handler机制之ThreadLocal详解

    概述 我们在谈Handler机制的时候,其实也就是谈Handler.Message.Looper.MessageQueue之间的关系,对于其工作原理我们不做详解(Handler机制详解). Messa ...

  2. Android多线程:深入分析 Handler机制源码(二)

    前言 在Android开发的多线程应用场景中,Handler机制十分常用 接下来,深入分析 Handler机制的源码,希望加深理解 目录 1. Handler 机制简介 定义 一套 Android 消 ...

  3. Android 系统(189)---Android Handler:这是一份 全面、详细的Handler机制 学习攻略

    Android Handler:这是一份 全面.详细的Handler机制 学习攻略 前言 在Android开发的多线程应用场景中,Handler机制十分常用 今天,我将献上一份 全面.详细的Handl ...

  4. 自己写个C++版本Handler来理解Android的Handler机制

    由于日常工作不需要经常写android上层应用,对Android的Handler机制一直处于模模糊糊的状态.使用Handler之后,回去写c++代码时,时刻怀念Android里面的Handler,希望 ...

  5. 深入浅出,Handler机制外科手术式的剖析(ThreadLocal,Looper,MessageQueen,Message)(上)...

    2019独角兽企业重金招聘Python工程师标准>>> 为什么会有handler机制? 在Android中,所有的UI控件都是运行在主线程中的, 如果我们从子线程访问UI,系统会报异 ...

  6. 浅谈Android中的Handler机制

    Handler是Android中提供的一种异步回调机制,也可以理解为线程间的消息机制.为了避免ANR,我们通常会把一些耗时操作(比如:网络请求.I/O操作.复杂计算等)放到子线程中去执行,而当子线程需 ...

  7. 浅谈Handler机制

    Android中Handler是一个十分重要的东西,很多时候都需要用到Handler.那什么是Handler呢?又为什么要用Handler呢? 什么是Handler? 我们知道Android更新UI的 ...

  8. Handler 机制分析

    android 子线程和UI线程的交互主要使用Handler的方法进行通信.本文分析Handler机制 Handler 如何使用? Handler的使用比较简单 public class MainAc ...

  9. Android Handler机制

    1.什么是Handler?   Handler是可以通过发送和处理Message和Runnable对象来关联相应线程的MessageQueue.通常我们认为它是一种异步机制.   a.可以让对应的Me ...

最新文章

  1. 程序员杂记:我们的爱情故事
  2. 姜宁谈红帽绩效考核:不关心员工具体做什么
  3. python编写一个压测重启的测试程序
  4. 去黑头的7个必胜秘方
  5. eovs实训报告总结心得_实训总结与心得体会3篇_心得体会
  6. 【5G落地】首批5G商用牌照正式颁发!5G和AI并肩前行,会带来下一次的工业革命吗?...
  7. 干掉MySQL:他们的MySQL分库分表架构,搞得太棒了!
  8. 数字图像处理(一) 绪论
  9. jquery removeAttr删除属性,attr给属性赋值
  10. paip.提升用户体验与安全性----登录与权限流程总结
  11. 海康威视网络摄像机连接、使用方法
  12. 手机APP物联网远程控制开关
  13. Macbook 终端命令使用sudo时改用指纹解锁
  14. median函数的使用方法_如何在Google表格中使用MEDIAN函数
  15. C博客作业02--循环结构
  16. 完全删除iCloud注册的Apple ID
  17. 【固态硬盘】入门讲解
  18. WT品牌语音芯片、功放芯片—让人机交互更简单,让电子世界更美好
  19. detectron研读
  20. 【matlab图像处理】直方图均衡化操作

热门文章

  1. Atitit.struts排除url 的设计and 原理 自定义filter 排除特定url
  2. mybatis(二)
  3. 30天敏捷生活(7):生成行动计划
  4. oracle 10g在redhat4.6上的安装
  5. 参与到开源项目中乐趣
  6. Warning:Null pointer access: The variable addStrings can only be null at this location
  7. Jquery第一章表格新增功能课后练习第二节2/2
  8. 通过分布式把本地图片上传到FTP(1)
  9. Java中什么是JAP之hibernate-mvc修改功能-Springmvc
  10. 有关文档流的一些注意事项