Android面试指南-面霸之路06-handler及mvp架构分析、设计


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
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值