Android面试指南-面霸之路06-handler及mvp架构分析、设计
来源:互联网 发布:电影售票软件 编辑:程序博客网 时间:2024/04/28 03:51
Handler理解1:
Message有两种创建方式,1)new Message 2)Message.obtain 。
每一个Message需要Handler来发送,handler有sendMessage方法,当sendMessage方法被调用,把msg带到Messqueue里。
Messqueue的 enqueueMessage方法,对msg进行排序,按照时间。如果发现刚在发送的msg排在队列的头部,就会唤醒主线程,让主线程去处理,去取。
Looper 主线程中队列已经创建,它是死循环,不停的去messqueue(消息队列)里去取消息。使用queue.next()方法,取到后就分发给Handler,就是传递到Handler里,如果没有取到就阻塞。等待下一次子线程来唤醒。
调用的是message.target.dispathMessage()方法。
dispathMessage就会调用handlerMessage方法。
Handler理解2:
1、首先Looper.prepare()在本线程中保存一个Looper实例,然后该实例中保存一个MessageQueue对象;因为Looper.prepare()在一个线程中只能调用一次,所以MessageQueue在一个线程中只会存在一个。
2、Looper.loop()会让当前线程进入一个无限循环,不端从MessageQueue的实例中读取消息,然后回调msg.target.dispatchMessage(msg)方法。
3、Handler的构造方法,会首先得到当前线程中保存的Looper实例,进而与Looper实例中的MessageQueue想关联。
4、Handler的sendMessage方法,会给msg的target赋值为handler自身,然后加入MessageQueue中。
5、在构造Handler实例时,我们会重写handleMessage方法,也就是msg.target.dispatchMessage(msg)最终调用的方法。
好了,总结完成,大家可能还会问,那么在Activity中,我们并没有显示的调用Looper.prepare()和Looper.loop()方法,为啥Handler可以成功创建呢,这是因为在Activity的启动代码中,已经在当前UI线程调用了Looper.prepare()和Looper.loop()方法。
Handler理解3:
Handler机制
andriod提供了Handler 和 Looper 来满足线程间的通信。Handler先进先出原则。Looper类用来管理特定线程内对象之间的消息交换(MessageExchange)。
Looper: 一个线程可以产生一个Looper对象,由它来管理此线程里的MessageQueue(消息队列)。
Handler: 你可以构造Handler对象来与Looper沟通,以便push新消息到MessageQueue里;或者接收Looper从Message Queue取出)所送来的消息。
Message Queue(消息队列):用来存放线程放入的消息。
线程:UIthread 通常就是main thread,而Android启动程序时会替它建立一个MessageQueue。
- 设计mvp程序架构
例如:
- 在Android的MVP架构中,使用了什么设计模式
Observer模式:通过EventBus实现订阅者,发布者的功能,实现 Model与 Presenter 的交互。
Proxy模式:View保持对Presenter的引用,通过Presenter代理,进行交互操作。
0 0
- Android面试指南-面霸之路06-handler及mvp架构分析、设计
- Android架构设计之MVP分析
- Android面试指南-面霸之路09-经验分享
- Android面试指南-面霸之路02-android常见面试题01
- Android面试指南-面霸之路03-android常见面试题02
- Android面试指南-面霸之路04-android常见面试题03
- Android面试指南-面霸之路05-android常见面试题04
- Android面试指南-面霸之路08-android常见面试题05
- 架构设计之MVP
- Android MVP架构分析
- Android开发之从OOP设计角度分析MVP架构模式
- Android架构之MVP
- Android架构之MVP
- Android之MVP架构
- Android App 的设计架构:MVC、MVP、MVVM 的分析
- Android面试指南-面霸之路01-Java、Activity、Intent
- Android面试指南-面霸之路07-优化合集
- 全面升级Android面试之handler面试题集
- 面向对象
- 127. Word Ladder-未完待续
- C++中的memset
- [js点滴]JavaScript关于函数总结
- 3080 道路规划
- Android面试指南-面霸之路06-handler及mvp架构分析、设计
- Dinic&EK模板记录
- BZOJ3509: [CodeChef] COUNTARI
- python 学习之cmd下的if语句
- 写给想创业的朋友,向敢于创业的朋友致敬
- 快速排序
- Kafka源码深度解析-序列12 -Server核心组件之2-ReplicaManager核心数据结构与Replica同步原理
- 计算机程序的思维逻辑 - 随机
- JS面向对象(二)—继承