美文网首页
android handler、生命周期、观察者模式事件编程

android handler、生命周期、观察者模式事件编程

作者: codeflame | 来源:发表于2018-08-23 09:55 被阅读0次

先阅读一个:
原文链接
简书转载链接

handler总体思路:
假设:公开的队列QA,A线程,B线程,A私有的Looper对象,Looper对象有loop函数
A线程一开始便执行loop函数。
loop函数作用:一个死循环,不断查询队列QA中是否有对象,无则继续循环。有则取出对象,从该对象获取handle对象,调用该handle对象的dispatchMessage()方法,该方法默认就调用handleMessage()方法。
由文章所示的dispatchMessage()方法原型可见,使用post方法、手动设定回调mCallback、重写的handleMessage,优先度是依次下降的。



实际上app的入口,也就是public static void main,实际是让主线程执行loop函数,其他线程往队列里写入消息让主线程得以取出并执行对应函数。当消息队列被插入结束消息时,对应操作为主线程跳出(break)loop函数,从而结束app。

我们熟知的事件编程就是用了观察者模式实现。
观察者模式实现:事件源有一个数组,事件源的某些函数执行时会遍历一次数组对象并执行对象的特定方法。

说白了就是:某个对象有成员A[] arr;,A类有方法void a(String text),某个对象setText(String text)函数:

public void setText(String text){
  for(A i : arr){ 
    i.a(text); 
  }
  this.text=text;
}

只要我们搞个B类来继承A类并重写方法a(),并把B的实例放进事件源的arr数组里面,这样每次调用setText()函数时,最终会调用我们写好的a()方法。如果不看具体实现,使用时感觉就像触发了事件一样。
只要再改改细节,使其符合java事件的进一步要求,我们就能称呼A类对象为事件监听器,称呼能够存放A类对象的为事件源,称呼传进方法a的参数为事件对象。

PS:可以看出来,以观察者模式实现的事件编程,没有涉及多线程,始终是一个线程运行到底。

相关文章

  • android handler、生命周期、观察者模式事件编程

    先阅读一个:原文链接简书转载链接 handler总体思路:假设:公开的队列QA,A线程,B线程,A私有的Loope...

  • lua问题

    1.lua与c++之间的观察者模式 先在lua代码中注册观察者 在c++代码中发送事件 2.使用handler()...

  • Jetpack-LiveData

    LiveData实现生命周期感知及避免内存泄漏的原因 Android官方架构组件LiveData: 观察者模式领域...

  • 谈KVC、KVO(重点观察者模式)机制编程

    谈KVC、KVO(重点观察者模式)机制编程 谈KVC、KVO(重点观察者模式)机制编程

  • Guava——EventBus

    EventBus是Guava的事件处理机制,是设计模式中的观察者模式(生产/消费者编程模型)的优雅实现。对于事件监...

  • EventBus

    EventBus是Guava的事件处理机制,是设计模式中的观察者模式(生产/消费者编程模型)的优雅实现。对于事件监...

  • guava EventBus使用

    EventBus是Guava的事件处理机制,是设计模式中的观察者模式(生产/消费者编程模型)的优雅实现。对于事件监...

  • EventBus使用

    EventBus事件总线.以观察者模式实现,消息推送/订阅.用于Android组件之间相互通信。 (定义:针对事件...

  • EventBus事件总线

    针对Android基于订阅-发布(观察者模式)的事件总线。常用于各控件之间消息传递。

  • 11.9设计模式-观察者模式-详解

    设计模式-观察者模式 观察者模式详解 观察者模式在android中的实际运用 1.观察者模式详解 2.观察者模式在...

网友评论

      本文标题:android handler、生命周期、观察者模式事件编程

      本文链接:https://www.haomeiwen.com/subject/ygcpiftx.html