今天要介绍的是一个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. leetcode练习之No.1------ 两数之和Two Sum

    github地址:git@github.com:ZQCard/leetcode.git 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能 ...

  2. 最简单的PHP socket

    服务端 <?phperror_reporting(E_ALL);set_time_limit(0); $ip = "127.0.0.1";$port = 1935; func ...

  3. linux 局域网内文件传送

    Linux scp命令用于Linux之间复制文件和目录,具体如何使用这里好好介绍一下,从本地复制到远程.从远程复制到本地是两种使用方式.这里有具体举例: ================== Linu ...

  4. 虚拟机oracle virtualbox 上安装centos6.5 网络设置

    上篇文章写到,在虚拟机上安装centos6.5,结果依照文章非常顺利的安装了,可是用yum安装软件的时候.报错,源有问题,不能下载,然后ping一下摆渡.非常悲催 dns解析不了,cat /etc/r ...

  5. Hybrid App开发实战

    Hybrid App开发实战 作者 李秉骏 发布于 九月 04, 2013 | [引言]近年来随着移动设备类型的变多,操作系统的变多,用户需求的增加,对于每个项目启动前,大家都会考虑到的成本,团队成员 ...

  6. React的设计哲学 - 简单之美

    React最初来自Facebook内部的广告系统项目,项目实施过程中前端开发遇到了巨大挑战,代码变得越来越臃肿且混乱不堪,难以维护.于是痛定思痛,他们决定抛开很多所谓的“最佳实践”,重新思考前端界面的 ...

  7. Spring 常用注入注解(annotation)和其对应xml标签

    使用注解需要修改bean.xml: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=& ...

  8. 树莓派之OLED12864视频播放—BadApple

    代码地址如下:http://www.demodashi.com/demo/13218.html 概述 本篇教程讲述了使用树莓派驱动OLED12864液晶屏,并在液晶屏上播放动画和视频. 硬件平台 树莓 ...

  9. Google Chrome 浏览器的检索语言设置

    解决为何从一开始安装Google Chrome 浏览器的时候,使用Google 搜索,结果都是日文的问题. 藏的比较隐蔽,没法在“设置”那里修改. 1.问题:搜索内容均是日文: 2.注意到右边有一个“ ...

  10. 动态加载script 和 link

    1.script EventUtil.addHandler(window, "load", function(event){ var script = document.creat ...