Handler

一, 回顾异步任务

AsyncTask

二, android 使用线程的规则

1,在主线程 不能做阻塞操作

2,在主线程之外的线程不能更新Ui

三, Handler的作用

1,在子线程中发送消息

2,在Ui线程获取消息和处理消息

note:Handler是 消息的发送者和消息的处理者

四: Message

Message 是线程之间消息的载体 包括对消息的描述 和任意数据的处理

Message 主要携带俩个int类型数据 和Object类型数据 还有个标记 what

五, Handler的消息处理机制

1,Handler 在工作线程发送消息和主线程接收和处理消息

对象:

final MessageQueue mQueue;封装好的Message对象 通过Handler发送到MessageQueue

final Looper mLooper;循环读取消息队列里的消息

方法:

handleMessage();处理Handler返回的消息(从Looper)

    ************************************************
sendMessage() handler发送消息的方法
sendMessageAtTime() 延时发送消息 定时(延时)
sendMessageDelayed() 延时
sendEmptyMessage(int what )根据标记发送空消息 post()
postAtTime(Runnable r, long uptimeMillis)
postDelayed(Runnable r, long delayMillis)
******enqueueMessage(queue, msg, uptimeMillis)将消息发送到消息队列******* >2,Message 携带线程间消息数据的载体 属性:
int what 标记
int arg1 存整型的数据
int arg2
Object obj 存的复杂的数据
Handler target; 标识当前消息发送给那个Handler
Messenger replyTo; 信使对象 APp夸进程的通信 private static Message sPool; 消息池
private static int sPoolSize = 0; 记录消息池中剩余消息的数量
private static final int MAX_POOL_SIZE = 50;消息池中最多含有消息的数量 方法:
obtain()消息池中取消息
recycle():使用完的Message对象及时回收
setTarget(Handler target):设置接收消息的Handler对象
sendToTarget():将消息发送到目标的Handler中
setData(Bundle data):设置Bundle数据 到Message
getData()从msg中获取Bundle对象 >3,MessageQueue:消息队列 相当于通道 (队列:先进先出) ` 方法:next() 从消息队列里取消息 >4,Looper: 消息泵 等待MessageQueue有消息的时候 将消息取出给Handler对象
> 属性:
static final ThreadLocal<Looper> sThreadLocal = new ThreadLocal<Looper>(); 本地线程的变量 保证一个线程中只有一个Looper对象
private static Looper sMainLooper; 主线程中Looper 对象 final MessageQueue mQueue; 消息队列 方法:
prepare():准备Looper
loop():循环读取MessageQueue中message 是无限循环 mQueue.next();等待 myLooper():从线程本地变量中 获取当前线程的Looper对象

六 子线程向主线程发送消息

>1,在主线程里实例化一个Handler对象

>2,在子线程中发送消息

>3,在主线程里实例化一个Handler对象里的handlerMessage() 方法中进行处理消息

七 主线程向子线程发送消息

1,Looper.prepare() 获取Looper

2,实例化Handler对象(note:在1和3之间)

3,Looper.Loop() 无限循环 获取数据

4,在主线程中使用handler发送消息

19 Handler 总结的更多相关文章

  1. 19 Handler 子线程向主线程发送信息

    案例一 Message创建三种方法: package com.example.day19_handler_demo1; import android.os.Bundle; import android ...

  2. StackExchange.Redis通用封装类分享(转)

    阅读目录 ConnectionMultiplexer 封装 RedisHelper 通用操作类封 String类型的封装 List类型的封装 Hash类型的封装 SortedSet 类型的封装 key ...

  3. android 之 Hnadler 、Message 、Looper

    Handler定义: 主要接受子线程发送来的数据,并用此数据配合主线程更新UI. 为什么要用Handler? 我们手机当中的很多功能或操作是不能都放在Activity当中的,比如下载文件.处理大量数据 ...

  4. 转:jQuery插件之Wookmark:流布局插件遇到图片资源请求过慢导致最终计算图片绝对位置top不够准确发生图片重叠的解决方案

    谈起Wookmark我想做过前端的大侠都不会觉得陌生,它就是远近闻名的流布局jQuery插件,这个插件使用起来非常简单,需要引入两个js: 1.<script src="/js/jqu ...

  5. 框架-springmvc源码分析(二)

    框架-springmvc源码分析(二) 参考: http://www.cnblogs.com/leftthen/p/5207787.html http://www.cnblogs.com/leftth ...

  6. 19 主线程向子线程发送信息(handler)

    package com.fmy.handler; import android.app.Activity; import android.os.Bundle; import android.os.Ha ...

  7. Android的Handler机制

    Handler机制的原理 Android 的 Handler 机制(也有人叫消息机制)目的是为了跨线程通信,也就是多线程通信.之所以需 要跨线程通信是因为在 Android 中主线程通常只负责 UI ...

  8. R自动数据收集第二章HTML笔记1(主要关于handler处理器函数和帮助文档所有示例)

    本文知识点:     1潜在畸形页面使用htmlTreeParse函数 2startElement的用法 3闭包 4handler函数的命令和函数体主要写法 5节点的丢弃,取出,取出标签名称.属性.属 ...

  9. Echarts 3.19 制作常用的图形 非静态

    最近阿里内部使用的 图表也向外开放了 而百度就好像更有良心一点,Echarts 早就开放了 . 自己学Echarts的时候走了很多的弯路,毕竟谁让自己菜呢,多撞几次南墙才晓得疼 才知道学习方法,新手上 ...

随机推荐

  1. [LOJ 6249]「CodePlus 2017 11 月赛」汀博尔

    Description 有 n 棵树,初始时每棵树的高度为 H_i,第 i 棵树每月都会长高 A_i.现在有个木料长度总量为 S 的订单,客户要求每块木料的长度不能小于 L,而且木料必须是整棵树(即不 ...

  2. [HAOI2011]向量

    题目描述 给你一对数a,b,你可以任意使用(a,b), (a,-b), (-a,b), (-a,-b), (b,a), (b,-a), (-b,a), (-b,-a)这些向量,问你能不能拼出另一个向量 ...

  3. [SDOI2016]硬币游戏

    题目描述 Alice 和 Bob 现在在玩的游戏,主角是依次编号为 1 到 n 的 n 枚硬币.每一枚硬币都有两面,我们分别称之为正面和反面.一开始的时候,有些硬币是正面向上的,有些是反面朝上的.Al ...

  4. [BZOJ]4805: 欧拉函数求和

    解题思路类似莫比乌斯函数之和 题目大意:求[1,n]内的欧拉函数$\varphi$之和.($n<=2*10^{9}$) 思路:令$ M(n)=\sum_{i=1}^{n}\varphi (i)  ...

  5. 【Gcd】

    [题目描述] 有 n 个正整数 x1~xn,初始时状态均为未选.有 m 个操作,每个操作给定一个编号 i,将 xi 的选取状态取反.每次操作后,你需要求出选取的数中有多少个互质的无序数对. [输入数据 ...

  6. C语言程序设计第六次作业--循环结构2

    (一)改错题 序列求和:输入一个正实数eps,计算序列部分和 1 - 1/4 + 1/7 - 1/10 + ... ,精确到最后一项的绝对值小于eps(保留6位小数). 输入输出样例: Input e ...

  7. H3C交换机如何配置管理VLAN

    1.输入"system-view"(简写"sys"),进入系统配置模式[H3C],2.下面就可以开始取消默认管理vlan了,输入"undo inter ...

  8. Nginx+Tomca+Redis实现负载均衡、资源分离、session共享

    目标实现:Nginx作为负载均衡后端多Tomcat实例,通过Redis实现Session共享. 操作系统环境:CentOS 6.8 SSH:SecureCRT 其中 Nginx服务:80端口 Tomc ...

  9. 简介JSP与FreeMarker及Volicity区别

    FreeMarker FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页.电子邮件.配置文件.源代码等)的通用工具. 它不是面向最终用户的,而是一个 ...

  10. vue--"卡片层叠" 组件 开发小记

    背景:影城移动点餐web App增加会员卡支付功能 需求:确认订单页点击会员卡项弹出会员卡列表,多张会员卡依次叠加覆盖上一张80%的高度,点击任意卡片则改卡片置为当前卡片,只有当前卡片显示全部卡片信息 ...