19 Handler 总结

时间:2022-09-10 19:44:40

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&period;Redis通用封装类分享&lpar;转&rpar;

    阅读目录 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源码分析&lpar;二&rpar;

    框架-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&lpar;主要关于handler处理器函数和帮助文档所有示例&rpar;

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

  9. Echarts 3&period;19 制作常用的图形 非静态

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

随机推荐

  1. Python Beautiful Soup学习之HTML标签补全功能

    Beautiful Soup是一个非常流行的Python模块.该模块可以解析网页,并提供定位内容的便捷接口. 使用下面两个命令安装: pip install beautifulsoup4 或者 sud ...

  2. shell 实现Linux 控制台下树形显示目录

    #!/bin/bash function main(){      local pre=$1    local name=$2    echo "$pre$name"    tes ...

  3. poj3696 快速幂的优化&plus;欧拉函数&plus;gcd的优化&plus;互质

    这题满满的黑科技orz 题意:给出L,要求求出最小的全部由8组成的数(eg: 8,88,888,8888,88888,.......),且这个数是L的倍数 sol:全部由8组成的数可以这样表示:((1 ...

  4. aehyok&period;com的成长之路一——开篇

    前言   不得不说最近三个月都没更新博客了,除了6月初的一篇博客外,今天的这一篇算是这三个月里发表的第二篇博客了.不过本人几乎每天都在博客园里刷来刷去,看大家发表的博文,从中汲取营养.确实博客园也可以 ...

  5. WPF 中获取DataGrid 模板列中控件的对像

    WPF 中获取DataGrid 模板列中控件的对像 #region 当前选定行的TextBox获得焦点 /// <summary> /// 当前选定行的TextBox获得焦点 /// &l ...

  6. hdu 3635

    http://acm.hdu.edu.cn/showproblem.php?pid=3635 1-n个城市,对应放着编号1-n的龙珠. 两种操作 T A B 把编号A的龙珠所在城市内的全部龙珠放到有编 ...

  7. Scrum Planning Card

    最近用Swift写了个小工具Scrum Planning Card,如果你也用scrum管理项目, 或许用这个工具可以提高你的工作效率. 另外欢迎提建议和反馈,谢谢. 欢迎关注我的微信公众号 Hope ...

  8. CentOS 安装中文输入法

    转载:http://blog.sina.com.cn/s/blog_9f1c093101019h03.html centos 6.3用yum安装中文输入法 1.需要root权限,所以要用root登录 ...

  9. Spring Data JPA 简单查询--方法定义规则

    一.常用规则速查 1  And 并且2  Or  或3  Is,Equals 等于4  Between  两者之间5  LessThan 小于6  LessThanEqual   小于等于7  Gre ...

  10. POJ 2481 Cows 【树状数组】

    <题目链接> 题目大意: 就是给出N个区间,问这个区间是多少个区间的真子集. 解题分析: 本题与stars类似,只要巧妙的将线段的起点和终点分别看成 二维坐标系中的x,y坐标,就会发现,其 ...