- 浏览: 26406 次
- 性别:
- 来自: 北京
最新评论
大家好,上一讲我们介绍了虚拟机概述,JIT概述,这一讲我们将进入Handler-不可缺少的异步.
课程目标:
熟悉Handler的概念Handler的实现原理Handler 异步实现方法Handler与线程的关系
重点难点: Handler与线程的关系Handler消息队列的实现
考核目标:
使用Handler是异步的,它会建立新线程么?noHandler是在主线程内么?Handler的post 和 sentMessage方法,使用的是一个队列还是两个?子线程中建立一个handler,然后sendMessage会怎样?子线程建立handler , 构造的时候传入主线程的,Looper?
Yes
课后练习:
用Handler实现图片更新的例子去研究Music app控制palyer controller时候的Handler应用
从一道问题开始研究
Handler是做什么的,既然是异步任务处理, 他本身是多线程的么?
Handler是什么,作用以及为何要引入Handler的概念?
Hanlder作用:
1)执行计划任务,你可以再预定的实现执行某些任务,可以模拟定时器
2)线程间通信。在Android的应用启动时,会创建一个主线程,主线程会创建一个消息队列来处理各种消息。当你创建子线程时,你可以再你的子线程中拿到父线程中创建的Handler对象,就可以通过该对象向父线程的消息队列发送消息了。由于Android要求在UI线程中更新界面,因此,可以通过该方法在其它线程中更新界面。
一、 角色描述
1.Looper:(相当于隧道) 一个线程可以产生一个Looper 对象,由它来管理此线程里的Message Queue( 车队,消息隧道) 。
2.Handler: 你可以构造Handler 对象来与Looper 沟通,以便push 新消息到Message Queue 里;或者接收Looper( 从Message Queue 取出) 所送来的消息。
3. Message Queue( 消息队列): 用来存放线程放入的消息。
4 .线程:UI thread 通常就是main thread ,而Android 启动程序时会替它建立一个Message Queue 。
每一个线程里可含有一个Looper 对象以及一个MessageQueue 数据结构。在你的应用程序里,可以定义Handler 的子类别来接收Looper 所送出的消息。
Message
MessageQueue
Looper
当前线程中有一个Looper这样的循环在监听消息队列,但又不是额外的线程,这不是和我们学习的常理相悖么?
Thinking...
Looper 又系统来控制的循环 。
Handler
我们来做几个实验
一、实验一:验证子线程中用主线程Handler实例操作主线程MessageQueue
1、Handler1.sendMessage,Handler1接收
2、Handler1.sendMessage,
Handler2能接收么?No
3、主线程就一个消息队列,为什么不同Handler实例之间不能共享消息(What Flag)?
二、实验二:验证用子进程默认是没有消息队列的
1、子线程中new Handler(),发消息
2、子线程中用HandlerThread,默认有消息队列
三、子线程的Handler可以使用于子线程的消息队列
1、子线程中得到主线程的Looper,发消息
2、使用Looper.prepare(),Looper.loop()
加载器(Loader):加载到内存:execve().
实验总结
1、Handler实例与消息处理是关联的,发送和接收要匹配
2、Handler操作队列,主要是在子线程操作主线程消息队列
3、子线程默认是没有消息队列的
本讲对Handler-不可缺少的异步做了简单的介绍,下一讲将进入Dalvik虚拟机概述,内容预告:LLY110602_Dalvik虚拟机概述,敬请期待。
特别推荐新课程:Android开发高端课程
http://www.mobidever.com/forum.php?mod=viewthread&tid=2098
本课视频地址1:http://www.tudou.com/programs/view/61h8EVjtzFI/ (土豆网)
本课视频地址2:http://www.tudou.com/programs/view/Z_0Hilc8Yts/ (土豆网)
课程下载地址:http://www.verycd.com/topics/2900036/ (VeryCD电驴)
作者博客:http://www.mobidever.com/forum.php (Sundy-Android开发联盟)
课程目标:
熟悉Handler的概念Handler的实现原理Handler 异步实现方法Handler与线程的关系
重点难点: Handler与线程的关系Handler消息队列的实现
考核目标:
使用Handler是异步的,它会建立新线程么?noHandler是在主线程内么?Handler的post 和 sentMessage方法,使用的是一个队列还是两个?子线程中建立一个handler,然后sendMessage会怎样?子线程建立handler , 构造的时候传入主线程的,Looper?
Yes
课后练习:
用Handler实现图片更新的例子去研究Music app控制palyer controller时候的Handler应用
从一道问题开始研究
Handler是做什么的,既然是异步任务处理, 他本身是多线程的么?
Handler是什么,作用以及为何要引入Handler的概念?
Hanlder作用:
1)执行计划任务,你可以再预定的实现执行某些任务,可以模拟定时器
2)线程间通信。在Android的应用启动时,会创建一个主线程,主线程会创建一个消息队列来处理各种消息。当你创建子线程时,你可以再你的子线程中拿到父线程中创建的Handler对象,就可以通过该对象向父线程的消息队列发送消息了。由于Android要求在UI线程中更新界面,因此,可以通过该方法在其它线程中更新界面。
一、 角色描述
1.Looper:(相当于隧道) 一个线程可以产生一个Looper 对象,由它来管理此线程里的Message Queue( 车队,消息隧道) 。
2.Handler: 你可以构造Handler 对象来与Looper 沟通,以便push 新消息到Message Queue 里;或者接收Looper( 从Message Queue 取出) 所送来的消息。
3. Message Queue( 消息队列): 用来存放线程放入的消息。
4 .线程:UI thread 通常就是main thread ,而Android 启动程序时会替它建立一个Message Queue 。
每一个线程里可含有一个Looper 对象以及一个MessageQueue 数据结构。在你的应用程序里,可以定义Handler 的子类别来接收Looper 所送出的消息。
Message
MessageQueue
Looper
当前线程中有一个Looper这样的循环在监听消息队列,但又不是额外的线程,这不是和我们学习的常理相悖么?
Thinking...
Looper 又系统来控制的循环 。
Handler
我们来做几个实验
一、实验一:验证子线程中用主线程Handler实例操作主线程MessageQueue
1、Handler1.sendMessage,Handler1接收
2、Handler1.sendMessage,
Handler2能接收么?No
3、主线程就一个消息队列,为什么不同Handler实例之间不能共享消息(What Flag)?
二、实验二:验证用子进程默认是没有消息队列的
1、子线程中new Handler(),发消息
2、子线程中用HandlerThread,默认有消息队列
三、子线程的Handler可以使用于子线程的消息队列
1、子线程中得到主线程的Looper,发消息
2、使用Looper.prepare(),Looper.loop()
加载器(Loader):加载到内存:execve().
实验总结
1、Handler实例与消息处理是关联的,发送和接收要匹配
2、Handler操作队列,主要是在子线程操作主线程消息队列
3、子线程默认是没有消息队列的
本讲对Handler-不可缺少的异步做了简单的介绍,下一讲将进入Dalvik虚拟机概述,内容预告:LLY110602_Dalvik虚拟机概述,敬请期待。
特别推荐新课程:Android开发高端课程
http://www.mobidever.com/forum.php?mod=viewthread&tid=2098
本课视频地址1:http://www.tudou.com/programs/view/61h8EVjtzFI/ (土豆网)
本课视频地址2:http://www.tudou.com/programs/view/Z_0Hilc8Yts/ (土豆网)
课程下载地址:http://www.verycd.com/topics/2900036/ (VeryCD电驴)
作者博客:http://www.mobidever.com/forum.php (Sundy-Android开发联盟)
发表评论
-
《2012Sundy高级课程更新》Android深入浅出系列课程文章列表
2012-03-15 10:25 1754既然是一个系列的教程 ... -
Android开发视频教程-深入浅出系列Lesson20-AFF111029学习Android界面开发的基础
2012-03-19 09:37 1654课程目标: 学习和掌握Android界面开发学习方法 了解An ... -
Android开发视频教程-深入浅出系列Lesson19-AFF110727_蓝牙编程入门
2012-03-19 09:38 1847课程目标 知道蓝牙是什么,能够做什么,知道常用蓝牙的API ... -
Android开发视频教程-深入浅出系列Lesson18-SPI110723_Mobile.Widget概述
2012-03-16 09:39 920· 课程目标: 知道Mobile Widget概念 , 知道其 ... -
Android深入浅出系列课程---Lesson17-在Android2.2以上实现MobileWidget
2012-03-16 09:36 1087大家好,上一讲我们介绍了虚拟机概述,JIT概述,这一讲我们将进 ... -
Android深入浅出系列课程---Lesson16-AFF110606_AsyncTask异步任务
2012-03-16 09:35 991大家好,上一讲我们介绍了Handler-不可缺少的异步,这一讲 ... -
Android深入浅出系列课程---Lesson15LLY110602_Dalvik虚拟机概述
2012-03-16 09:35 1164更多Android深入浅出课程列表:http://www.eo ... -
Android深入浅出系列课程---Lesson13 LLY110529_虚拟机概述,JIT概述
2012-03-15 10:43 946大家好,上一讲我们介绍了Android.Framework源码 ... -
Android深入浅出系列课程---Lesson12 AFF110525_Android多线程系统概要
2012-03-15 10:42 1061大家好,上一讲我们介绍了Android.Framework源码 ... -
Android深入浅出系列课程--Lesson11 Android.Framework源码下载及编译
2012-03-15 10:29 2260大家好,上一讲我们介 ... -
Android深入浅出系列课程---Lesson10 SHW110518_关于课程顺序的说明
2012-03-15 10:28 882大家好,上一讲我们介绍了ActivityWindowView的 ... -
Android深入浅出系列课程---Lesson9 AAF110430_ActivityWindowView的关系
2012-03-14 10:39 1071更多Android深入浅出课程列表:http://www.eo ... -
Android深入浅出系列课程---Lesson8 Android应用程序启动
2012-03-14 10:37 1164特别推荐新课程:Android ... -
Android深入浅出系列课程---Lesson7 LLY110426_Android系统启动
2012-03-14 10:35 762大家好,上一讲我们介绍了Activity状态保存,这一讲我们将 ... -
Android深入浅出系列课程---Lesson6 AAF110503_Activity状态保存
2012-03-14 10:32 897大家好,上一讲我们介绍了Android中Activity是什么 ... -
Android深入浅出系列课程---Lesson5 AAF110502_Activity是什么
2012-03-14 10:28 871大家好,上一讲我们介绍了Manifest文件的使用,这一讲我们 ... -
Android深入浅出系列课程---Lesson4-AAF110429_介绍Manifest文件的使用
2012-03-13 13:33 1004大家好,上一讲我们介绍了进程生命周期(Process Life ... -
Android深入浅出系列课程---Lesson3 AAF110427_进程生命周期Process Lifecycle
2012-03-13 13:15 983大家好,上一讲我们介 ... -
Android深入浅出系列课程---Lesson2 AAF110426_Log打开android大门
2012-03-13 13:12 932大家好,上一讲对Android中Context的介绍,这一讲将 ... -
Android深入浅出系列课程---Lesson1 AAF110430_android中context介绍
2012-03-13 13:06 848大家好,这一讲我们来介绍下Android中Context 一、 ...
相关推荐
《深入浅出Android--Google手持设备应用程序设计》是一本针对Android开发者的权威指南,它以易懂的语言和实例深入解析了Android系统的核心概念和技术。这本书是PDF格式,适合电子阅读和学习,对于初学者和想要提升...
《深入浅出 Android Google手持设备应用程序设计》这本书是Android开发者必备的参考资料,它全面而深入地探讨了在Google手持设备上构建应用程序的各种技术和策略。以下将详细解析书中的关键知识点: 1. **Android...
《深入浅出Android--Google手持设备应用程序设计》这本书是Android开发者深入理解平台和技术的重要参考资料。它涵盖了Android应用程序开发的各个方面,旨在帮助读者从基础到高级,全面掌握Android应用设计和实现的...
《深入浅出Android--Google手持设备应用程序》这本书是Android开发者必备的参考资料,它全面而深入地探讨了在Google手持设备上构建应用程序的各种技术和实践。在这个技术日新月异的时代,Android作为全球最大的移动...
《深入浅出Android--Google手持设备应用程序设计》这本书旨在为读者提供全面且深入的Android应用开发知识,通过实例解析,让读者逐步掌握Android平台上应用程序的设计与实现。Android系统作为全球最受欢迎的移动操作...
《深入浅出Android--Google手持设备应用程序设计》是一本针对Android开发者的权威指南,它涵盖了Android平台的基础到高级概念,旨在帮助读者理解并掌握在Google手持设备上构建应用程序的全面知识。这本书的内容丰富...
Handler是Android系统中用于线程间通信的重要工具,它允许开发者在不同的线程间传递消息并执行相应的处理。在Android应用开发中,由于主线程(UI线程)负责处理用户交互,因此耗时操作如网络请求、文件下载不应在...
《Android开发深入浅出》是一本专为Android开发者量身打造的专业指南,无论你是初涉Android开发的新手,还是在该领域有一定经验的开发者,都能从中受益匪浅。这本书全面覆盖了Android平台的基础知识和高级技术,旨在...
根据提供的信息,我们可以总结出以下关于“Android深入浅出”的知识点: ### 一、概览 **标题**:“Android深入浅出” **描述**:该资源包含一系列与Android开发相关的视频教程下载链接,旨在帮助学习者更好地...
Demo-实例讲解线程池里面的UI如何刷新,处理两个开发者头疼的问题: 1. 数据经常需要读取更新,并且比较耗时,需要分步刷新UI. 2. UI界面切换后,如何停止掉子线程里面正在读取的数据而不会将旧数据刷新到新UI界面上...
Android Weak Handler Memory safer implementation of android.os.Handler Problem Original implementation of Handler always keeps hard reference to handler in queue of execution. Any object in Message or...
学习这个源码,我们可以深入理解如何利用Handler、AsyncTask或者更现代的RxJava、LiveData等工具来处理异步任务。同时,还可以学习到如何结合使用BitmapFactory和 Glide的API进行图片的解码和显示。 此外,源码中...
赠送jar包:netty-handler-4.1.68.Final.jar; 赠送原API文档:netty-handler-4.1.68.Final-javadoc.jar; 赠送源代码:netty-handler-4.1.68.Final-sources.jar; 赠送Maven依赖信息文件:netty-handler-4.1.68....
### 超级Android深入浅出课程思维导图 sundy #### 一、思维导图概览 本思维导图由特级Android工程师sundy老师亲自制作,旨在帮助学习者全面掌握Android架构及其核心技术,从宏观到微观进行全方位剖析。 #### 二、...
在Android应用开发中,Handler、AsyncTask和异步加载是三个关键的概念,它们主要用于解决UI线程阻塞问题,提高应用程序的响应速度和用户体验。下面将详细解释这三个概念及其相互关系。 **Handler(处理器)** ...
本实例关注的是如何在Android NDK环境下实现一个类似Java层的消息队列(Message Queue)和Handler机制,以及如何在原生代码中创建和管理多线程。 首先,我们要理解Java层的Handler和消息队列的工作原理。在Java中,...
总之,理解并熟练运用Android的线程池、Handler、异步刷新以及双缓存机制,是开发高效、稳定、用户体验良好的应用必不可少的基础。在实际项目中,通过封装和模块化这些技术,可以进一步提升开发效率和代码质量。