一分钟理解handler机制
背景
小编昨晚跟同学聊了很久,了解到其面试中的困惑,每当被问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机制相关推荐
- android Handler机制之ThreadLocal详解
概述 我们在谈Handler机制的时候,其实也就是谈Handler.Message.Looper.MessageQueue之间的关系,对于其工作原理我们不做详解(Handler机制详解). Messa ...
- Android多线程:深入分析 Handler机制源码(二)
前言 在Android开发的多线程应用场景中,Handler机制十分常用 接下来,深入分析 Handler机制的源码,希望加深理解 目录 1. Handler 机制简介 定义 一套 Android 消 ...
- Android 系统(189)---Android Handler:这是一份 全面、详细的Handler机制 学习攻略
Android Handler:这是一份 全面.详细的Handler机制 学习攻略 前言 在Android开发的多线程应用场景中,Handler机制十分常用 今天,我将献上一份 全面.详细的Handl ...
- 自己写个C++版本Handler来理解Android的Handler机制
由于日常工作不需要经常写android上层应用,对Android的Handler机制一直处于模模糊糊的状态.使用Handler之后,回去写c++代码时,时刻怀念Android里面的Handler,希望 ...
- 深入浅出,Handler机制外科手术式的剖析(ThreadLocal,Looper,MessageQueen,Message)(上)...
2019独角兽企业重金招聘Python工程师标准>>> 为什么会有handler机制? 在Android中,所有的UI控件都是运行在主线程中的, 如果我们从子线程访问UI,系统会报异 ...
- 浅谈Android中的Handler机制
Handler是Android中提供的一种异步回调机制,也可以理解为线程间的消息机制.为了避免ANR,我们通常会把一些耗时操作(比如:网络请求.I/O操作.复杂计算等)放到子线程中去执行,而当子线程需 ...
- 浅谈Handler机制
Android中Handler是一个十分重要的东西,很多时候都需要用到Handler.那什么是Handler呢?又为什么要用Handler呢? 什么是Handler? 我们知道Android更新UI的 ...
- Handler 机制分析
android 子线程和UI线程的交互主要使用Handler的方法进行通信.本文分析Handler机制 Handler 如何使用? Handler的使用比较简单 public class MainAc ...
- Android Handler机制
1.什么是Handler? Handler是可以通过发送和处理Message和Runnable对象来关联相应线程的MessageQueue.通常我们认为它是一种异步机制. a.可以让对应的Me ...
最新文章
- 程序员杂记:我们的爱情故事
- 姜宁谈红帽绩效考核:不关心员工具体做什么
- python编写一个压测重启的测试程序
- 去黑头的7个必胜秘方
- eovs实训报告总结心得_实训总结与心得体会3篇_心得体会
- 【5G落地】首批5G商用牌照正式颁发!5G和AI并肩前行,会带来下一次的工业革命吗?...
- 干掉MySQL:他们的MySQL分库分表架构,搞得太棒了!
- 数字图像处理(一) 绪论
- jquery removeAttr删除属性,attr给属性赋值
- paip.提升用户体验与安全性----登录与权限流程总结
- 海康威视网络摄像机连接、使用方法
- 手机APP物联网远程控制开关
- Macbook 终端命令使用sudo时改用指纹解锁
- median函数的使用方法_如何在Google表格中使用MEDIAN函数
- C博客作业02--循环结构
- 完全删除iCloud注册的Apple ID
- 【固态硬盘】入门讲解
- WT品牌语音芯片、功放芯片—让人机交互更简单,让电子世界更美好
- detectron研读
- 【matlab图像处理】直方图均衡化操作
热门文章
- Atitit.struts排除url 的设计and 原理 自定义filter 排除特定url
- mybatis(二)
- 30天敏捷生活(7):生成行动计划
- oracle 10g在redhat4.6上的安装
- 参与到开源项目中乐趣
- Warning:Null pointer access: The variable addStrings can only be null at this location
- Jquery第一章表格新增功能课后练习第二节2/2
- 通过分布式把本地图片上传到FTP(1)
- Java中什么是JAP之hibernate-mvc修改功能-Springmvc
- 有关文档流的一些注意事项