文章目录

  • 一、Handler 发送与处理消息 ( 两大功能 )
  • 二、Handler 初始化
  • 三、完整 Handler 代码

一、Handler 发送与处理消息 ( 两大功能 )


Handler 有两个功能 :

功能一 : 发送消息到 Looper 中的 消息队列 MessageQueue 中 ;

    /*** 发送消息* @param msg*/public void sendMessage(Message msg){// 为消息设置发送的 Handlermsg.target = this;// 向消息队列中放入要执行的消息mQueue.enqueueMessage(msg);}

功能二 : 接收 Looper 中的 loop 方法传来的 Message , 并 执行该 Message 代表的任务 ;

Handler 执行 Message 任务 , 具体的执行逻辑需要 用户实现 ; 用户创建 Handler 时 , 需要覆盖 handleMessage 方法 , 在重写的方法中处理不同的 Message 任务 ;

    /*** 执行消息对应的任务* @param next*/public void handleMessage(Message next) {}

二、Handler 初始化


Handler 初始化 :

Handler 的功能一 发送消息 , 就是向 消息队列 MessageQueue 中发送消息 , 并将消息放到 MessageQueue 中的 Message 链表队列的最后一个 ;

这就需要 Handler 持有 消息队列 MessageQueue 的引用 ,

消息队列封装在 Looper 中 , 因此需要先拿到 线程本地变量 Looper , 然后从 Looper 中获取对应的消息队列 ;

这里就需要特别注意 , 在初始化 Handler 时 , 需要用到 Looper , 如果 Looper 为空 , Handler 初始化就会失败 ;

因此在 创建 Handler 之前 , 必须先调用 Looper 的 prepare 方法 , 先将 Looper 进行初始化操作 ;

    /*** 消息队列* 该消息队列封装在 Looper 中* Looper 封装在线程本地变量中*/MessageQueue mQueue;public Handler(){/*在 Handler 中需要拿到 Looper进而拿到 Looper 中的 MessageQueue 消息队列Handler 的操作就是将 Message 放入 MessageQueue因此在 Handler 中需要持有 MessageQueue 消息队列的引用获取 Looper 时 , Looper 必须已经初始化完毕,也就是已经调用过 prepare 创建了 Looper 并将其放入了线程本地变量*/// 获取当前线程中的 线程本地变量 LooperLooper looper = Looper.looper();// 获取封装在 Looper 中的 消息队列 MessageQueuemQueue = looper.mQueue;}

三、完整 Handler 代码


package kim.hsl.handler;public class Handler {/*** 消息队列* 该消息队列封装在 Looper 中* Looper 封装在线程本地变量中*/MessageQueue mQueue;public Handler(){/*在 Handler 中需要拿到 Looper进而拿到 Looper 中的 MessageQueue 消息队列Handler 的操作就是将 Message 放入 MessageQueue因此在 Handler 中需要持有 MessageQueue 消息队列的引用获取 Looper 时 , Looper 必须已经初始化完毕,也就是已经调用过 prepare 创建了 Looper 并将其放入了线程本地变量*/// 获取当前线程中的 线程本地变量 LooperLooper looper = Looper.looper();// 获取封装在 Looper 中的 消息队列 MessageQueuemQueue = looper.mQueue;}/*** 发送消息* @param msg*/public void sendMessage(Message msg){// 为消息设置发送的 Handlermsg.target = this;// 向消息队列中放入要执行的消息mQueue.enqueueMessage(msg);}/*** 执行消息对应的任务* @param next*/public void handleMessage(Message next) {}
}

【Android 异步操作】手写 Handler ( Handler 发送与处理消息 | Handler 初始化 | 完整 Handler 代码 )相关推荐

  1. 将tensorflow训练好的模型移植到Android (MNIST手写数字识别)

    将tensorflow训练好的模型移植到Android (MNIST手写数字识别) [尊重原创,转载请注明出处]https://blog.csdn.net/guyuealian/article/det ...

  2. android 电子签名 手写签名 功能实现

    android 电子签名  手写签名 功能实现 这个手写的效果 就是一个 重写的的自定义的view  代码如下: package com.example.hand.views;import java. ...

  3. android 手写 流畅,提高Android应用手写流畅度(基础篇)

    在使用android类的手写应用时,整体上都有这样一个印象:android的手写不流畅.不自然,和苹果应用比起来相差太远.本文结合作者亲身经历,介绍一下有效提高手写流畅度的几种方法: 1.未做任何处理 ...

  4. android米聊手写和涂鸦源码,涂鸦手写齐上阵 新版米聊将快乐进行到底

    "米聊"是由小米科技出品的一款多平台,跨移动.联通.电信运营商的手机端免费即时通讯工具,通过手机网络(WiFi.3G.GPRS),可以跟你的米聊联系人进行无限量的免费的实时的语音对 ...

  5. android米聊手写和涂鸦源码,米聊Android新版发布 广播也能玩涂鸦

    [IT168 应用]想让朋友知道你在哪儿?简单的文字无法表达此时的心情?想和好友一起互动,评论对方的最新广播?米聊Android新版轻松搞定! 米聊Android新版特色 广播也涂鸦:米聊Androi ...

  6. java实现手写签名,Android实现手写签名

    本文实例为大家分享了Android手写签名的实现方法,产品要求用户可以在app上签协议..所以得弄个手写签名版,参考了一些资料自己写了个PaintView去继承View,实现签名功能. package ...

  7. android+汉王手写引擎,汉王推键盘输入引擎 从手写专家到输入法专家

    2009年12月11日,在中国通信学会主办的"2009中国手机产业发展大会"上,手机产业各界人士云集一堂,国际手写识别领域巨头汉王科技表示,此次他们正式推出的HWKey™ 键盘输入 ...

  8. android米聊手写和涂鸦源码,Android访米聊手写和涂鸦源码

    Android访米聊手写和涂鸦源码 \请下载源代码,只上传Android访米聊手写和涂鸦源码源程序列表内容,如果需要此程序,请点击-下载,下载需要资料源代码. Android访米聊手写和涂鸦源码.ra ...

  9. Android电子手写签名

    前言:最近一直在做h5,尼玛!!!前端真伤不起啊,由于刚接触,害怕兼容性啥的,导致我一个页面写了一天,泪崩啦-- 好吧,觉得得去撸一撸android才能平复的不安的小内心,刚好看到有一个这样的需求,需 ...

最新文章

  1. 微软亚洲互联网工程院招聘NLP算法工程师、AI应用科学家
  2. 【干货分享】可能是东半球最全的.NET Core跨平台微服务学习资源
  3. mysql 5.7临时表空间_深度解析MySQL 5.7之临时表空间
  4. AngularJS 拦截器和好棒例子
  5. Ubuntu 安装 Sun JDK
  6. Jlink无法识别CPU/lpc2103/lpc2131
  7. vue-provide/inject轻松实现跨级访问祖先组件
  8. 解决 同时安装 python3,python2环境时,用pip安装 python3 包
  9. (Java) 线程池
  10. 815. Bus Routes
  11. C语言数组元素的查询
  12. 用生产者和消费者模式实现奇数偶数不同线程交替输出
  13. 软件_聚合搜索引擎[博]
  14. IIS7.5 在已有的WEB网站上配置FTP发布
  15. python 与或非_Python |Python 从入门到精通(放弃)之注释、行与缩进、多行语句...
  16. Java:jdk8中map新增的merge方法
  17. 如何安装python3.6_python3.6环境下如何安装freetype库和基本使用方法
  18. Dijkstra算法python可视化实现
  19. Spring源码下载地址
  20. 小卡机器人积木教程_一盒56种玩法!这套智能积木机器人秒杀家中99%的益智玩具!| 新年礼物...

热门文章

  1. SQLServer 实现rownum 的功能
  2. 如何让你的SQL运行得更快
  3. 201671010456-张琼 实验二 词频统计软件项目报
  4. 文本超出隐藏 综合整理
  5. python操作RabbitMQ
  6. 编译型语言、解释型语言、静态类型语言、动态类型语言概念与区别
  7. Eclipse启动报错Java was started but returned exit code=13
  8. jsp中有关于超链接的问题
  9. mongodb windows安装
  10. Python函数01/函数的初识/函数的定义/函数调用/函数的返回值/函数的参数