《Android进阶之光》--事件总线
No1:
EventBus三要素:
1)Event:事件
2)Subscriber:事件订阅者
3)Publisher:事件发布者
No2:
EventBus的4种ThreadMode(线程模型):
1)POSTING(默认):该事件是在哪个线程发布出来的,事件处理函数就会在哪个线程中运行
2)MAIN:事件的处理会在UI线程中执行
3)BACKGROUND:在新线程或者发布的子线程中执行,禁止进行UI更新操作
4)ASYNC:在新建的子线程中执行,禁止进行UI更新操作
No3:
EventBus源码解析
EventBus.getDefault()->(单例模式)
new EventBus()->
EventBus(EventBusBuilder)->(建造者模式)
register->
SubscriberMethodFinder.findSubscriberMethods->findUsingInfo->getSubscriberInfo->findUsingReflectionInSingleClass->
subscribe->
...
No4:
otto使用
compile 'com.squareup:otto:1.3.8'
public class BusData{
public String message;
public BusData(String message){
this.message = message;
}
public String getMessage(){
return message;
}
public void setMessage(String message){
this.message = message;
}
}
public class OttoBus extends Bus{
private volatile static OttoBus bus;
private OttoBus(){}
public static OttoBus getInstance(){
if(bus == null){
synchronized(OttoBus.class){
if(bus==null){
bus = new OttoBus();
}
}
}
return bus;
}
}
Bus bus = OttoBus.getInstance();
bus.register(this);
bus.unregister(this); @Subscribe
public void setContent(BusData data){
tv_message.setText(data.getMessage());
} OttoBus.getInstance().post(new BusData("刘望舒的博客更新了"));
No5:
Otto主要类的功能
1)Produce、Subscribe:发布者和订阅者注解类
2)Bus:事件总线类,用来注册和取消注册,维护发布-订阅模型,并处理事件调度分发
3)HandlerFinder、AnnotatedHandlerFinder:用来查找发布者和订阅者
4)EventProducer、EventHandler:分别封装发布者和订阅者的数据结构
《Android进阶之光》--事件总线的更多相关文章
- [置顶]
曙光到来,我的新书《Android进阶之光》已出版
独立博客版本请点击这里 由来 2016年我开始建立了自己的知识体系,所有的文章都是围绕着这个体系来写,随着这个体系的慢慢成长,开始有很多出版社联系我写书,因为比较看好电子工业出版社,就顺理成章的开始了 ...
- 《Android进阶之光》--Material Design
接上篇<Android进阶之光>--Android新特性 No1: 组件: 1)底部工作条-Bottom Sheets 2)卡片-Cards 3)提示框-Dialogs 4)菜单-Menu ...
- 《Android进阶之光》--注解与依赖注入框架
No1: 标准注解: 1)@Override:覆写 2)@Deprecated:过时 3)@SuppressWarnings:取消警告 4)@SafeVarargs:申明使用了可变长度参数的方法 No ...
- 《Android进阶之光》--RxJava实现RxBus
事件总线RxBus,替代EventBus和otto 1)创建RxBus public class RxBus{ private static volatile RxBus rxBus; private ...
- Android进阶之光-第1章-Android新特性-读书笔记
第 1 章 Android 新特性 1.1 Android 5.0 新特性 1.1.1 Android 5.0 主要新特性 1. 全新的 Material Design 新风格 Material De ...
- 《Android进阶之光》--Android新特性
Android 5.0新特性 1)全新的Material Design设计风格 2)支持多种设备 3)全新的通知中心设计--按照优先级显示 4)支持64位ART虚拟机 5)多任务视窗Overview ...
- 《Android进阶之光》--RxJava
No1: RxJava使用 dependencies{ compile 'io.reactivex:rxjava:1.2.0' compile 'io.reactivex:rxandroid:1.2. ...
- 《Android进阶之光》--Dagger2
No1: Project的build.gradle文件添加 buildscript{ dependencies{ ...classpath 'com.neenbedankt.gradle.plugin ...
- 《Android进阶之光》--ButterKnife
No1: 添加依赖库 Project的build.gradle文件添加 buildscript{ ... dependencies{ ... classpath 'com.neenbedankt.gr ...
随机推荐
- 单选按钮QRadioButton
继承 QAbstractButton import sys from PyQt5.QtGui import QPixmap from PyQt5.QtWidgets import QApplicat ...
- [C++]Linux之图形界面编程库[curses库]之入门教程
1. 安装 //方法一 sudo apt-get install libncurses5-dev [ ubuntu 16.04:亲测有效] //方法二 sudo apt-get install ncu ...
- Linux监控工具Spotlight on Unix
1.介绍 Spotlight on Unix是一款Linux系统运行状况的监控工具,可以安装在Windows下,监控Linux服务器的运行状况. 监控项目包括:CPU.内存.交换空间.虚拟内存等的使用 ...
- activity 解析
acitvity的四种状态: running.paused.stopped.killed 生命周期: onCreate()用来加载资源布局 onStart()启动activity,用户已经可以看到界面 ...
- RNN(1) ------ “理解LSTM”(转载)
原文链接:http://www.jianshu.com/p/9dc9f41f0b29 Recurrent Neural Networks 人类并不是每时每刻都从一片空白的大脑开始他们的思考.在你阅读这 ...
- 【转】理解*(void**)
#include <stdio.h> int main() { int *p; ; unsigned ; p = &a; printf("%d\n", *p); ...
- 无向图最小割Stoer-Wagner算法学习
无向连通网络,去掉一个边集可以使其变成两个连通分量则这个边集就是割集,最小割集当然就权和最小的割集. 使用最小切割最大流定理: 1.min=MAXINT,确定一个源点 2.枚举汇点 3.计算最大流,并 ...
- 005_关于HTTP协议中的保持连接
缘起 中午在群里讨论,用ab测试 一台只提供静态文件服务, 不与其他任何系统交互的时候,为什么也会产生大量的TIME WAIT状态的. 首先,我们可以简单的理解,在TCP连接的两端,谁主动断开连接(先 ...
- KVM -> 虚拟机管理&console登录_02
1.KVM虚拟机管理操作 virsh命令常用参数总结 1.开机关机: virsh list (只可以查看运行的虚拟机) virsh list --all (全部都可以查看) 开机与关机: virsh ...
- IE6下select被这罩住
在我们做弹出遮罩层时经常遇到这种问题,就是select被这罩住不兼容IE6,其实解决这种问题并不难,只要掌握住原理就挺简单的. 首先就是当遮罩层出现时select要暂时隐藏,但是不能用display: ...