`
fxxd1212
  • 浏览: 25730 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android深入浅出系列课程---Lesson14Handler-不可缺少的异步

阅读更多
大家好,上一讲我们介绍了虚拟机概述,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开发联盟)

  • 大小: 91.7 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics