今天要介绍的是一个Android中使用得比較多的android 事件总线 EventBus模式的一个框架Otto。

Otto 官网:http://square.github.io/otto/

一、Android Studio中配置Otto (Eclipse中直接下载jar包导入)

跟之前介绍的其它的框架一样,它只须要简单地在build.gradle中配置以下一行红色字体就可以

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:19.+'
    //otto 所须要依赖的包
    compile 'com.squareup:otto:+'

}

二、Otto事件总线框架浅析

1、为什么要用Otto框架?

Otto框架的主要功能是帮助我们来减少多个类之间的耦合度的(解耦)。

譬如:一个类A和还有一个类B之间。假设A要操作B中的某个方法。

传统的方法:A直接调用B对象的该方法(耦合在一起)

事件总线机制:A不须要调用B类的方法,而只须要产生并发出 一个“事件通知”, 假设B订阅了该“事件”

那么它将会接受到这个事件,做出对应的操作。这样就被解耦了。

2. Otto框架使用(结合代码介绍)

Otto框架事实上相对之前的几个Android开源框架来说。更easy理解。

它主要运用到一个类: Bus类(用于注冊类,注销类。公布事件)

两个注解: @Subscribe (订阅)    @Produce (生产)    【都是针对“事件”的注解】

为了方便,我这边没有使用两个类来做这个Demo。 只是假设大家要试的话也能够,只是记住一点,不管是

公布者类  还是 订阅者类, 都须要用Bus进行类的注冊,还有注销。

否则将没法被Bus识别,这样就无法生效了。

以下的Demo, 仅为了让大家知道“事件”被产生了之后。post出来,全部订阅了该事件的类都会接到该事件,接受的先后顺序,不由我们控制!

public class MyActivity extends ActionBarActivity {

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
findViewById(R.id.button_change).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
BusProvider.getBusInstance().post(new DataChangedEvent("this is changed String"));//公布事件
}
});
} @Override
protected void onResume() {
super.onResume();
BusProvider.getBusInstance().register(this);//注冊 } @Override
protected void onPause() {
super.onPause();
BusProvider.getBusInstance().unregister(this);//注销
} @Subscribe //订阅事件DataChangedEvent
public void sayGoodOnEvent(DataChangedEvent event){
Log.e("event", "good");
} @Subscribe //订阅事件
public void sayBadOnEvent(DataChangedEvent event){
Log.e("event", "bad");
} @Produce //产生事件
public DataChangedEvent produceDataChangedEvent(){
return new DataChangedEvent("this is changed String");
} }

Android Otto框架浅析的更多相关文章

  1. Android应用框架浅析

    http://blog.csdn.net/yanbober/article/category/3206943 Android应用层View绘制流程与源码分析   http://blog.csdn.ne ...

  2. Android aidl Binder框架浅析

      转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38461079 ,本文出自[张鸿洋的博客] 1.概述 Binder能干什么?B ...

  3. Android自动化测试框架UIAutomator原理浅析

    UIAutomator是一个Android自动化测试框架,是谷歌在Android4.1版本发布时推出的一款用Java编写的UI测试框架,它只能用于UI即黑盒方面的测试.所以UIAutomator只能运 ...

  4. Android源码浅析(三)——Android AOSP 5.1.1源码的同步sync和编译make,搭建Samba服务器进行更便捷的烧录刷机

    Android源码浅析(三)--Android AOSP 5.1.1源码的同步sync和编译make,搭建Samba服务器进行更便捷的烧录刷机 最近比较忙,而且又要维护自己的博客,视频和公众号,也就没 ...

  5. Android百大框架排行榜

    Android百大框架排行榜 15类Android通用流行框架 - 流风,飘然的风 - 博客园https://www.cnblogs.com/zdz8207/p/android-opensource- ...

  6. 2017年Android百大框架排行榜

    框架:提供一定能力的小段程序 >随意转载,标注作者"金诚"即可 >本文已授权微信公众号:鸿洋(hongyangAndroid)原创首发. >本文已经开源到Gith ...

  7. android 优秀框架整理

    程序员界有个神奇的网站,那就是github,这个网站集合了一大批优秀的开源框架,极大地节省了开发者开发的时间,在这里我进行了一下整理,这样可以使我们在使用到时快速的查找到,希望对大家有所帮助! 1. ...

  8. 2017年Android百大框架排行榜(转)

    一.榜单介绍 排行榜包括四大类: 单一框架:仅提供路由.网络层.UI层.通信层或其他单一功能的框架 混合开发框架:提供开发hybrid app.h5与webview结合能力.web app能力的框架 ...

  9. Android 开源框架Universal-Image-Loader学习

    Android 开源框架Universal-Image-Loader完全解析(一)--- 基本介绍及使用 Android 开源框架Universal-Image-Loader完全解析(二)--- 图片 ...

随机推荐

  1. linux服务器网络配置

    一.配置linux服务器的网络 手动修改配置网卡文件 先检查网卡是否正常 lspci |grep Ether 与网卡相关的TCP/IP网络配置文件位置 /etc/sysconfig/network-s ...

  2. Yii2.0源码分析之——控制器文件分析(Controller.php)创建动作、执行动作

    在Yii中,当请求一个Url的时候,首先在application中获取request信息,然后由request通过urlManager解析出route,再在Module中根据route来创建contr ...

  3. apache ProxyPass proxypassreverse

    ProxyPass与ProxyPassReverse及ProxyPassMatch的概述 分类: LINUX及服务器维护2011-09-21 10:25 7491人阅读 评论(0) 收藏 举报 red ...

  4. Linux命令未找到(command not found),误删Linux path原始路径

    1.执行:/bin/vim /etc/profile (打开并编辑profile将Path修改正确,然后保存退出) 2.执行:export PATH=/usr/bin:/usr/sbin:/bin:/ ...

  5. Java ArrayList的模拟实现

    package test; import java.util.Arrays; import java.util.Collection; public class MyArrayList<E> ...

  6. Tomcat中work目录的作用

    今天在修改了某个jsp后发现:tomcat容器启动后,访问该jsp返回的结果依然是修改之前的内容,略感不解,于是乎研究了一下Tomcat中work目录的作用. Tomcat中work目录的作用: js ...

  7. HBase总结(十八)Hbase rowkey设计一

    hbase所谓的三维有序存储的三维是指:rowkey(行主键),column key(columnFamily+qualifier),timestamp(时间戳)三部分组成的三维有序存储. 1.row ...

  8. SSM&SSH项目中 springmvc 乱码问题解决

    需要在web.xml文件中配置过滤器: <!-- 过滤器 过滤乱码 --> <filter> <filter-name>characterEncodingFilte ...

  9. windows lua 多线程 线程同步

    今天在改一个程序,改成部分逻辑用lua写,这个程序是多线程的.将程序中部分逻辑改成lua之后,各种非法访问内存错误,各种奇奇怪怪的问题,不分时间,不分地点的出现崩溃.从调用堆栈来看,基本都是使用lua ...

  10. mongoDB 高级查询之复杂查询$where

    http://blog.csdn.net/drifterj/article/details/7833883