19 Handler 总结
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的时候走了很多的弯路,毕竟谁让自己菜呢,多撞几次南墙才晓得疼 才知道学习方法,新手上 ...
随机推荐
- QueryRunner--常见方法
数据库链接池的使用,一方面解决了数据库访问过多时造成数据库承受的压力,另一方面也简化了数据查询,今天就 DBUtils包所提供的QueryRunner类(org.apache.commons.dbut ...
- [HEOI2015]兔子与樱花
Description 很久很久之前,森林里住着一群兔子.有一天,兔子们突然决定要去看樱花.兔子们所在森林里的樱花树很特殊.樱花树由n个树枝分叉点组成,编号从0到n-1,这n个分叉点由n-1个树枝连接 ...
- [SDOI2017]序列计数
题目描述 Alice想要得到一个长度为nn的序列,序列中的数都是不超过mm的正整数,而且这nn个数的和是pp的倍数. Alice还希望,这nn个数中,至少有一个数是质数. Alice想知道,有多少个序 ...
- 洛谷4月月赛R1
T1.题目大意:n个人站成一排,有m个团队,每个人有且属于一个团队,可以让若干个人出队,任意交换这些人的位置后再站回去,问要让所有同一团队的人连续地站在一起,至少要出队几个.(n<=10^5,m ...
- ●POJ 1329 Circle Through Three Points
题链: http://poj.org/problem?id=1329 题解: 计算几何,求过不共线的三点的圆 就是用向量暴力算出来的东西... (设出外心M的坐标,由于$|\vec{MA}|=|\ve ...
- 简述RIP路由协议和OSPF路由协议的相同点和不同点。
路由协议分为静态路由协议和动态路由协议.动态路由协议有很多种,如RIP.OSPF.EIGRP等. 1.RIP(路由信息协议)是路由器生产商之间使用的第一个开放标准.RIP有两个版本:RIPv1和RIP ...
- 笔记14 Hello Spring MVC
搭建一个SpringMVC所需要的包: 1.创建MySpringMVC项目,使用dynamic web project的方式. 2.导入jar包,放到/WebContent(WebRoot)/WEB- ...
- Linux基本知识总结
一.Linux的基本介绍 起源:大家知道先有Unix,后有的linux就行了,其他的细节可以自己查阅资料. 特点:开源!!! 安全(Linux的病毒远少于window). 免费(商业公司最喜欢这一点) ...
- postgresql 安装使用
www.postgresql.org去下载你需要的版本,我下载的9.6.8 安装过程中会让你输入一次密码,其余的默认就ok 默认超级用户名postgres 打开 pgadmin4,我们将语言改为中文会 ...
- Unrecognized token 'XXXX': was expecting ('true', 'false' or 'null')
原因是,返回或发送数据格式不规范. 当dataType指定为json后,1.4+以上的jquery版本对json格式要求更加严格.如果不是严格的json格式,就不能正常执行success回调函数. J ...