android视频教程

android视频教程

5 (13人评价)
  • 课时:(26)

  • 学员:(409)

  • 浏览:(15203)

  • 加入课程

android视频教程16的笔记

相关课时: 笔记详情:

Handler概念,

实现原理,

异步实现方法,

与线程的关系

Handler消息队列的实现

 

使用Handler是异步的,它会建立新线程吗?

Handler是主线程内吗?

Handler的post和sendMessage方法,使用的是一个队列还是两个?

mars将有两个队列,线程队列和消息队列。

应该只有一个队列。

子线程中建立一个handler,然后sendMessage会怎样?

子线程建立handler,构造的时候传入主线程的Looper

 

Handler是做什么的,既然是异步任务处理,他本身是多线程的吗?

 

Handler作用:

1 执行计划任务

2 线程间通信

 

Handler的要素:

1 Handler.java 连接Looper和Message的操作,不关心Looper和Message的实现。

post()发送Runnable接口实现,实际调用sendMessage。1 消息发送到消息队列。2 回调函数和Runable关联。

sendMessage()把消息发送到消息队列。

handleMessage()接收

2 Looper.java(相当于隧道,监听器,监听消息队列中的消息)

可以关联消息队列并监听。

prepare()让当前线程具有一个looper的实例。

loop()循环监听消息队列。

不是所有的线程都有looper

思考一下looper的实现?

handler不是一个线程

looper是一个死循环,存在于一个线程中。

looper由系统来控制的,底层vm控制,和当前主线程没关系。looper没有新开一个线程。

并非每个线程都有一个looper实例。

3 Message.java,MessageQueue.java

MessageQueue.java:

enqueueMessage()将消息体放到消息队列。

next()游标指向下一个消息。looper循环时会用到。

Message.java:

实现Parcelable接口。一般需要传递的对象实现这个接口。需要序列号的还要实现序列化接口。

what属性 name-space

一个线程一般只有一个消息队列。

一个handler实例只能接收到自己发出的message信息。共用一个messageQueue,通过what属性,只取自己的message。

obtain()获取一个message对象的实例。handler中会通过botainMessage得到消息。实际是调用Message的obtain()方法。

5.线程:UI Thread通常是main thread,android启动程序时会替它建立一个MessageQueue

Handler不开启新的线程。

HandlerThread类默认有looper。

0 0

你感兴趣的课程

8万+浏览/ 916学员/ 4.5评分
免费
6万+浏览/ 177学员/ 5评分
免费
6万+浏览/ 973学员/ 4.8评分
免费