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 总结的更多相关文章
-
19 Handler 子线程向主线程发送信息
案例一 Message创建三种方法: package com.example.day19_handler_demo1; import android.os.Bundle; import android ...
-
StackExchange.Redis通用封装类分享(转)
阅读目录 ConnectionMultiplexer 封装 RedisHelper 通用操作类封 String类型的封装 List类型的封装 Hash类型的封装 SortedSet 类型的封装 key ...
-
android 之 Hnadler 、Message 、Looper
Handler定义: 主要接受子线程发送来的数据,并用此数据配合主线程更新UI. 为什么要用Handler? 我们手机当中的很多功能或操作是不能都放在Activity当中的,比如下载文件.处理大量数据 ...
-
转:jQuery插件之Wookmark:流布局插件遇到图片资源请求过慢导致最终计算图片绝对位置top不够准确发生图片重叠的解决方案
谈起Wookmark我想做过前端的大侠都不会觉得陌生,它就是远近闻名的流布局jQuery插件,这个插件使用起来非常简单,需要引入两个js: 1.<script src="/js/jqu ...
-
框架-springmvc源码分析(二)
框架-springmvc源码分析(二) 参考: http://www.cnblogs.com/leftthen/p/5207787.html http://www.cnblogs.com/leftth ...
-
19 主线程向子线程发送信息(handler)
package com.fmy.handler; import android.app.Activity; import android.os.Bundle; import android.os.Ha ...
-
Android的Handler机制
Handler机制的原理 Android 的 Handler 机制(也有人叫消息机制)目的是为了跨线程通信,也就是多线程通信.之所以需 要跨线程通信是因为在 Android 中主线程通常只负责 UI ...
-
R自动数据收集第二章HTML笔记1(主要关于handler处理器函数和帮助文档所有示例)
本文知识点: 1潜在畸形页面使用htmlTreeParse函数 2startElement的用法 3闭包 4handler函数的命令和函数体主要写法 5节点的丢弃,取出,取出标签名称.属性.属 ...
-
Echarts 3.19 制作常用的图形 非静态
最近阿里内部使用的 图表也向外开放了 而百度就好像更有良心一点,Echarts 早就开放了 . 自己学Echarts的时候走了很多的弯路,毕竟谁让自己菜呢,多撞几次南墙才晓得疼 才知道学习方法,新手上 ...
随机推荐
-
Python Beautiful Soup学习之HTML标签补全功能
Beautiful Soup是一个非常流行的Python模块.该模块可以解析网页,并提供定位内容的便捷接口. 使用下面两个命令安装: pip install beautifulsoup4 或者 sud ...
-
shell 实现Linux 控制台下树形显示目录
#!/bin/bash function main(){ local pre=$1 local name=$2 echo "$pre$name" tes ...
-
poj3696 快速幂的优化+欧拉函数+gcd的优化+互质
这题满满的黑科技orz 题意:给出L,要求求出最小的全部由8组成的数(eg: 8,88,888,8888,88888,.......),且这个数是L的倍数 sol:全部由8组成的数可以这样表示:((1 ...
-
aehyok.com的成长之路一——开篇
前言 不得不说最近三个月都没更新博客了,除了6月初的一篇博客外,今天的这一篇算是这三个月里发表的第二篇博客了.不过本人几乎每天都在博客园里刷来刷去,看大家发表的博文,从中汲取营养.确实博客园也可以 ...
-
WPF 中获取DataGrid 模板列中控件的对像
WPF 中获取DataGrid 模板列中控件的对像 #region 当前选定行的TextBox获得焦点 /// <summary> /// 当前选定行的TextBox获得焦点 /// &l ...
-
hdu 3635
http://acm.hdu.edu.cn/showproblem.php?pid=3635 1-n个城市,对应放着编号1-n的龙珠. 两种操作 T A B 把编号A的龙珠所在城市内的全部龙珠放到有编 ...
-
Scrum Planning Card
最近用Swift写了个小工具Scrum Planning Card,如果你也用scrum管理项目, 或许用这个工具可以提高你的工作效率. 另外欢迎提建议和反馈,谢谢. 欢迎关注我的微信公众号 Hope ...
-
CentOS 安装中文输入法
转载:http://blog.sina.com.cn/s/blog_9f1c093101019h03.html centos 6.3用yum安装中文输入法 1.需要root权限,所以要用root登录 ...
-
Spring Data JPA 简单查询--方法定义规则
一.常用规则速查 1 And 并且2 Or 或3 Is,Equals 等于4 Between 两者之间5 LessThan 小于6 LessThanEqual 小于等于7 Gre ...
-
POJ 2481 Cows 【树状数组】
<题目链接> 题目大意: 就是给出N个区间,问这个区间是多少个区间的真子集. 解题分析: 本题与stars类似,只要巧妙的将线段的起点和终点分别看成 二维坐标系中的x,y坐标,就会发现,其 ...