otto android,Android Otto调研
这两天对Otto进行了一个简单的调研,发现官网特别简单差点儿没东西,github上给的sample也不是非常好。网上的技术博客也差点儿千篇一律,我就把自己的心得体会写下来吧,如有缘者看见望其少走弯路。
大家都知道这是一个公布者/订阅者模式,也都知道@Produce使用来注冊一个须要公布的方法,可是我在实际应用中却从来没用到过@Produce,仅仅须要定义一个事件,在须要公布的是好post一下这个事件,然后在须要接收这个消息的Activity或Fragment中@Subscribe一下即可了。详细就三步。
第一步,构造一个event事件。须要传递的參数放在构造方法中。比如:
public class TextChangeEvent {
public final String s;
public TextChangeEvent(String s) {
this.s = s;
}
@Override
public String toString() {
return this.s;
}
}
第二步,在须要公布消息的地方用post公布,post的參数是一个event的实例。new一个出来就OK了:
findViewById(R.id.btn1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
BusProvider.getInstance().post(new TextChangeEvent("注冊呢"));
AnotherActivity.this.finish();
}
});
第三步,在须要接收消息的界面用@Subscribe接收一下就能够了:
@Subscribe
public void onTextChanged(TextChangeEvent event) {
text.setText(event.toString());
Log.v("cat", event.toString());
}
到这里就完毕了一个从消息公布。在总线中传递,再到须要接收的地方被接收处理的过程,当中有几点须要注意的:
1 、Otto推荐使用单例模式。即仅仅有一个Bus实例,那么我们就构造一个BusProvider:
import com.squareup.otto.Bus;
public class BusProvider {
private static final Bus BUS = new Bus();
public static Bus getInstance() {
return BUS;
}
private BusProvider() {
}
}
2 、Otto的github上给的样例是在一个Activity的onResume()方法中对Bus注冊自己,在onPause()方法中取消注冊,我认为在实际应用中。一个界面假设不再前台那么它假设也须要接收消息那么就将取消注冊的方法放在onDestroy()中,这样能防止在界面进入Pause状态时取消注冊:
@Override
protected void onDestroy() {
super.onDestroy();
BusProvider.getInstance().unregister(this);
}
恩,Otto很easy好用的总线模式。用注解的方法就能够完毕消息的公布和接收,尽管性能要比EventBus差一点,可是假设胜在代码简洁、逻辑清晰,那么损失一点性能也是能接受的,毕竟那一点性能对如今的CPU根本不算什么。
otto android,Android Otto调研相关推荐
- Android 指纹相关调研
Android 指纹相关调研 背景:公司产品同学提出要接入指纹,用于登录场景,提高转化率,由于之前没接触过指纹,接下来就是指纹的相关调查. 一:指纹的优势 我们传统的登录方式,需要用户输入用户名和密码 ...
- Android - Android Studio 解决访问被墙的问题
Android - Android Studio 解决访问被墙的问题 参考文章: (1)Android - Android Studio 解决访问被墙的问题 (2)https://www.cnblog ...
- OpenCV2.4.9 For Android + Android Studio (with gradle)配置教程
OpenCV2.4.9 For Android + Android Studio (with gradle)配置教程 10 回复 / 9501 浏览 本页底部本帖地址 4king2 年前 - 2014 ...
- [Android]Android端ORM框架——RapidORM(v2.1)
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/6020412.html [Android]Android端ORM ...
- [Android] Android开发优化之——使用软引用和弱引用
Java从JDK1.2版本开始,就把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期.这四种级别由高到低依次为:强引用.软引用.弱引用和虚引用. 这里重点介绍一下软引用和弱引用. 如 ...
- android Android项目构建过程
今天,简单讲讲android studio如何把写好的工程打包成apk的. 平时开发过程中我们通过android studio编写完成android项目之后直接点击 Run 'app'就可以在buil ...
- 图解Android - Android GUI 系统 (2) - 窗口管理 (View, Canvas, Window Manager)
Android 的窗口管理系统 (View, Canvas, WindowManager) 在图解Android - Zygote 和 System Server 启动分析一 文里,我们已经知道And ...
- android抽屉屏幕右滑,android - Android - 使滑动抽屉从左向右滑动 - 堆栈内存溢出...
我使用下面的XML布局在我的应用程序中实现了"Sliding Drawer":(我从androidpeople.com得到了这个例子) android:layout_width=& ...
- [Android]Android四大组件之Service总结
一.Service介绍 Service是Android中实现程序后台运行的解决方案,它非常适合用于去执行那些不需要和用户交互而且还要长期运行的task.Service的运行不需要依赖于任何用户界面,即 ...
- [Android] Android 锁屏实现与总结 (一)
实现锁屏的方式有多种(锁屏应用.悬浮窗.普通Activity伪造锁屏等等).但国内比较主流并且被广泛应用的Activity伪造锁屏方式. 实例演示图片如下: 系列文章链接如下: [Android] A ...
最新文章
- Caused by: java.lang.NoClassDefFoundError: redis/clients/util/Pool
- mysql中case when then的用法
- JavaScript精要
- java小基础之instanceof运算符
- docker Registry镜像仓库
- 新计算机无法 盘启动不了,U盘无法被电脑识别导致制作U盘启动盘失败怎么办?...
- vue中点击添加class,双击去掉class
- 2017-2018-2 20155315《网络对抗技术》Exp3:免杀原理与实践
- 计算器怎么编程java_java编程中怎样实现一个计算器
- 网络集成方案_用户需要的综合性解决方案:网络安全架构集成的价值凸显
- Drools规则引擎使用
- 异常检测 and GAN网络(2)
- 介绍一个可以轻松下载病毒样本的数据库
- 应用标题及描述不可滥用关键字
- IAP之boot实现
- 痞子衡嵌入式:ARM Cortex-M文件那些事(5)- 映射文件(.map)
- 全网官方开放API平台接口整合
- 南阳OJ题目33---蛇形填数
- 马尔代夫的华为“新4军”
- win10打开模拟器蓝屏
热门文章
- R语言ggplot2可视化分面图(faceting)、在所有的分面中添加相同的参考基准曲线(overlay a base or reference plot to all facets )
- R语言使用ggplot2包geom_jitter()函数绘制分组(strip plot,一维散点图)带状图(改变图例位置、移除图例)实战
- R语言cox回归模型案例(绘制列线图、校正曲线):放疗是否会延长胰脏癌手术患者的生存时间
- Neo4j和Titan的对比
- IF、Isolation Forest、孤立森林算法
- 查看服务器CPU的个数、CPU的核数、多核超线程数
- Linux下测试的c++的使用
- android 监听物理返回键,Android应用开发之react-native 监听Android物理返回键
- tensorflow中的tf.summary.image
- 9.LeetCode第350题---两个数组的交集2