关于handler 和 looper 的问题
重新去学习回顾looper和handler ,还是需要重新认识这个经常使用的机制。
我首先是看任玉刚老师的书《android的开发艺术探索》的第十章。
里面一句话开始说出了我们大概的理解
——handler的使用就是将一个人物切换到handler 所在的线程去执行。
在里面,我们需要理解handler运行需要两个底层looper 和 messagequeue
messagequeue,叫做消息队列,但是存储的不是真正的队列,而是单链表。
looper,使用来处理消息,而且对应也是每个对应线程的一个特殊的threadlocal。
整个过程,可以理解为:
handler通过sendmessage把msg发送到messsagequeue,然后messagequeue的next方法调用looper去处理这个msg消息。接下来,就是looper会把消息发送回handler的dispatchmessage方法来处理
但是有个地方,就是在dispatchmessage的msg.callback和Callback,两者间是有区别的,根据书上所说:
自带的Callback,可以用来创建一个handler的实例但是不需要派生handler的子类。
具体这个地方也需要理解。
而looper要注意的是,因为这个类会不断无限循环调用方法,需要在完成所有事情后使用quit或quitsafely(在所有消息结束后立即退出looper)。
handler 还有一个特殊的构造方法,就是
public Handler(Looper looper){
this(Looper looper,null,false);
}
这个也是解决我之前遇到过的一个异常:
can't create handler inside thread that has not called looper.prepare()。
关于handler 和 looper 的问题的更多相关文章
- (转)Android消息处理机制(Handler、Looper、MessageQueue与Message)
转自 http://www.cnblogs.com/angeldevil/p/3340644.html Android消息处理机制(Handler.Looper.MessageQueue与Messag ...
- Android多线程分析之三:Handler,Looper的实现
Android多线程分析之三:Handler,Looper的实现 罗朝辉 (http://www.cnblogs.com/kesalin/) CC 许可,转载请注明出处 在前文<Android多 ...
- 深入理解Message, MessageQueue, Handler和Looper
做过Android的都知道Message, MessageQueue, Handler和Looper,但知道不代表你理解它们.有时觉得用得很顺手,但Android怎么实现又说不上来,总觉得似懂非懂.不 ...
- [转]Handler MessageQueue Looper消息循环原理分析
Handler MessageQueue Looper消息循环原理分析 Handler概述 Handler在Android开发中非常重要,最常见的使用场景就是在子线程需要更新UI,用Handler ...
- 【Android】Handler、Looper源码分析
一.前言 源码分析使用的版本是 4.4.2_r1. Handler和Looper的入门知识以及讲解可以参考我的另外一篇博客:Android Handler机制 简单而言:Handler和Looper是 ...
- Handler、Looper、MessageQueue、Thread源码分析
关于这几个之间的关系以及源码分析的文章应该挺多的了,不过既然学习了,还是觉得整理下,印象更深刻点,嗯,如果有错误的地方欢迎反馈. 转载请注明出处:http://www.cnblogs.com/John ...
- Handler与Looper,MessageQueue的关系
总结一下Handler与Looper,MessageQueue的关系,并实现自定义与子线程相关的Handler. 一.Handler与Looper,MessageQueue的关系 它们之间的关系其实就 ...
- 解析Android消息处理机制:Handler/Thread/Looper & MessageQueue
解析Android消息处理机制 ——Handler/Thread/Looper & MessageQueue Keywords: Android Message HandlerThread L ...
- Android开发手记(28) Handler和Looper
Android的消息处理有三个核心类:Looper,Handler和Message.其实还有一个Message Queue(消息队列),但是MQ被封装到Looper里面了,我们不会直接与MQ打交道.平 ...
- Android Handler 机制 - Looper,Message,MessageQueue
Android Studio 2.3 API 25 从源码角度分析Handler机制.有利于使用Handler和分析Handler的相关问题. Handler 简介 一个Handler允许发送和处理M ...
随机推荐
- mysql怎么查询一条记录的前一条记录和后一条记录
上一条:select * from 表 where 数据id<@当前显示数据id order by 数据_id asc) limit 1下一条:select * from 表 where 数据i ...
- Android 常用开发工具以及Mac常用软件
Android 常用的开发工具记录.其中包括AndroidStudio(IDEA)插件.Mac 上好用的软件以及国内知名Android开发者博客等. Android Studio 插件 codota ...
- Qtp常见问题
(1)Qtp不能识别对象 插件加载错误 IE内未加载BHOManager加载项
- Best way to add Gradle support to IntelliJ Project
1, Touch build.gradle in root project folder, and use plugins: apply plugin: 'idea' apply plugin: 'j ...
- 2. 上传Android代码到github
1. 建立git仓库 cd到本地项目根目录,执行git命令 git init 同时会在项目根目录下生成一个.git的隐藏文件 windows下先禁用 ...
- c coroutine
今天看了下云风c coroutine 代码 博客,发现 coroutine 实现原理其实还比较简单,就用户态栈切换,只需要几十行汇编,特别轻量级. 具体实现 1. 创建一个coroutine: 也就 ...
- JSON 的标准:双引号而非单引号!
刚刚测试发现一段很简单的.看似正确的代码却是错误的: <?php $json_str = "{'name':'Eric', 'age':23}"; var_dump(json ...
- UIAutomator
UI Automator Viewer The uiautomatorviewer tool provides a convenient GUI to scan and analyze the UI ...
- js 实现图片实时预览
<body> 上传图片: <input type="file" name="file" style="width: 200px; h ...
- A Complete List of .NET Open Source Developer Projects
http://scottge.net/2015/07/08/a-complete-list-of-net-open-source-developer-projects/?utm_source=tuic ...