(学习Mooc的笔记)
转载请标明出处:http://blog.csdn.net/yuqing_1102/article/details/54972229

1.handle是什么?

handle是android提供用来更新UI的一套机制,也是一套信息处理机制,可以发送消息,也可以通过它处理消息。

2.handle用法

注意:其中Runnable是在UI线程中调用的方法。(1)handle.post(Runnable);(2)handle.postDelayed(Runnable, long);其中在Runnable中再次postDealyed(Runnable, long),即可循环(3)handle.removeCallbacks(Runnable);此方法可停止循环(4)handle.sendMessage();(5)handle.sendMessageDelayed(long);(6)new Handle(Callback);
此方法返回true表示拦截成功,后面的方法不再执行,false表示不加拦截
private Handler myHandler = new Handler(new Callback() {@Overridepublic boolean handleMessage(Message msg) {textView2.setText("update");return true; //下面的方法不再执行
//      return false; //下面的方法继续执行 }
}){@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);handler.removeCallbacks(myRunnable);}
};

……

3.android为什么要设计只能通过handle来更新UI机制

解决多线程并发问题。如果更新UI操作加锁,性能会下降,使用handle更新UI的操作,都是在主线程的消息队列中轮询处理的。

4.handle原理(与Looper,MessageQueue的关系)

handle:封装了消息的发送,主要包括消息发给谁
Looper:内部包含了消息队列MeaageQueue,所有Handle发送的消息都走向MessageQueue,Looper.loop()死循环,负责不断从MessageQueue消息队列中取消息并发送给目标
MessageQueue:消息队列,添加、处理消息

总结:Handle负责发送消息,Looper负责接收Handle发送的消息,并直接把消息回传给Handle本身,MessageQueue就是一个存储消息的容器。

附:ActivityThread:管理应用程序的主线程的执行,在Android系统中,默认情况,一个应用程序的各个组件都会在一个进程(Process)中,是有此进程的主线程负责执行。
ActivityThread和普通的Java类一样,入口是main方法,里面创建了Looper对象(Looper.prepareMainLooper();),在创建Looper过程中,创建了MessageQueue对象。在new Handle()构造方法中,获取到当前线程的Looper对象,即可获取到线程的MessageQueue,这样Handle和Looper/MeaasgeQueue建立了联系,再通过sendEmptyMessage()就可将信息加入消息队列中,然后通过Looper.loop()方法进行轮询取消息(Message msg = queue.next();)并发送给handle本身(msg.target.dispatchMessage(msg);),最后handle在handleMessage(Msg)中处理消息。
如果在子线程中创建handle,需要在new Handle()之前手动使用Looper.prepare();方法,并在handleMessage之后使用Looper.loop();方法进行取信息。

5.子线程更新UI的方法

(1)handle.post(Runnable);
(2)handle.sendMessage();
(3)runOnUiThread(Runnable);
(4)view.post(Runnable);
这四种方法本质都是通过handle机制更新UI的。

Android-Handle详解相关推荐

  1. Android Linker详解

    Android Linker详解 本文目的 Linker入口 So的装载 总结 本文目的 Unidbg在对So进行模拟执行的时候,需要先将So文件加载到内存,配置So的进程映像,然后使用CPU模拟器( ...

  2. 【转】Android菜单详解——理解android中的Menu--不错

    原文网址:http://www.cnblogs.com/qingblog/archive/2012/06/08/2541709.html 前言 今天看了pro android 3中menu这一章,对A ...

  3. Android菜单详解——理解android中的Menu

    前言 今天看了pro android 3中menu这一章,对Android的整个menu体系有了进一步的了解,故整理下笔记与大家分享. PS:强烈推荐<Pro Android 3>,是我至 ...

  4. Android LayoutInflater详解

    Android LayoutInflater详解 在实际开发中LayoutInflater这个类还是非常有用的,它的作用类 似于findViewById().不同点是LayoutInflater是用来 ...

  5. android Fragments详解

    android Fragments详解一:概述 android Fragments详解二:创建Fragment 转载于:https://my.oschina.net/liangzhenghui/blo ...

  6. android WebView详解,常见漏洞详解和安全源码(下)

    上篇博客主要分析了 WebView 的详细使用,这篇来分析 WebView 的常见漏洞和使用的坑.  上篇:android WebView详解,常见漏洞详解和安全源码(上)  转载请注明出处:http ...

  7. android WebView详解,常见漏洞详解和安全源码(上)

    这篇博客主要来介绍 WebView 的相关使用方法,常见的几个漏洞,开发中可能遇到的坑和最后解决相应漏洞的源码,以及针对该源码的解析.  由于博客内容长度,这次将分为上下两篇,上篇详解 WebView ...

  8. android子视图无菜单,Android 菜单详解

    Android中菜单分为三种,选项菜单(OptionMenu),上下文菜单(ContextMenu),子菜单(SubMenu) 选项菜单 可以通过两种办法增加选项菜单,一是在menu.xml中添加,该 ...

  9. Android StateFlow详解

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/121913352 本文出自[赵彦军的博客] 文章目录 系列文章 一.冷流还是热流 S ...

  10. Android SharedFlow详解

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/121911675 本文出自[赵彦军的博客] 文章目录 系列文章 什么是SharedF ...

最新文章

  1. 模型压缩95%:Lite Transformer,MIT韩松等人
  2. 网络营销外包专员浅析网络营销外包站内关键词优化技巧(不外传)
  3. springmvc九:spring mvc 简单介绍
  4. pycharm提示:PEP 8: E127 continuation line over-indented for visual indent
  5. debian 安装java_debian9安装jdk1.8
  6. IOS学习笔记07---C语言函数-printf函数
  7. WPF 自定义BarChartControl(可左右滑动的柱状图)
  8. xlswrite wps matlab,Matlab实例学习-----Matlab与Excel交互,Matlab作为自动化客户端调用Excel服务器...
  9. 第一次c语言课程设计——学生选课管理系统
  10. 面试官问我Python日历模块,我直接用Flask开发Web版日历应用给他
  11. xposed修改微信步数
  12. 计算机打不开管理没反应,为什么电脑上的软件打不开点了没有反应任务管理器也打不开...
  13. 12 行列式01--- 定义、计算 与性质: n级行列式的性质、行列式计算
  14. 安装Kong和Konga
  15. 构建宽带城域网的基本技术与方案
  16. ZCMU--5154: 体育运动
  17. Neo4j教程网盘下载
  18. bootstrap框架过时了吗_浅议bootstrap 框架优缺点
  19. RFID固定资产管理
  20. 工业用微型计算机 ppt,工业用微型计算机1章.ppt

热门文章

  1. Mathematics Subject Classification (MSC)
  2. Java多线程-线程的创建(Thread类的基本使用)
  3. 《实战Java高并发程序设计》.pdf
  4. Unity3d UnityEditor编辑器定制和开发插件
  5. 分布式id那些事儿(建议收藏)
  6. 计算机网络-应用层和传输层协议分析实验(PacketTracer)
  7. BUUCTF Web 极客大挑战 2019 EasySQL
  8. 食物链(带权并查集)
  9. Linux学习笔记(二十三) -- QT的安装和卸载
  10. VMware-vmx.exe无法彻底删除,虚拟机无法正常启动