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根本不算什么。

时间: 2024-10-09 11:52:02

Android Otto调研的相关文章

Android:Otto源码分析

Otto源码分析 Otto是一个轻量级的EventBus,它的使用非常简单,我们使用一个Bus的单例,所有需要产生事件(@Produce bus.post(new YourEvent(-)))或者处理事件(@Subscribe)的对象,在create时register,销毁destroy时unregister即可. 使用 @Subscribe 订阅事件,也就是事件的处理者,它有且仅有一个参数YourEvent,每一个Subscribe对应处理一个YourEvent.Event用于连接(匹配)po

Android Otto框架浅析

今天要介绍的是一个Android中使用得比較多的android 事件总线 EventBus模式的一个框架Otto. Otto 官网:http://square.github.io/otto/ 一.Android Studio中配置Otto (Eclipse中直接下载jar包导入) 跟之前介绍的其它的框架一样,它只须要简单地在build.gradle中配置以下一行红色字体就可以 dependencies {    compile fileTree(dir: 'libs', include: ['*

微信稳居Android App排行榜4月份国内榜首

根据某机构通过对Android样本访问行为的持续监测数据进行样本属性加权并根据iOS/Android用户调研数据建模推总得出中国移动互联网用户规模以及相应的用户结构数据显示,2015年4月份国内Android App的排行榜中微信活跃用户量增至4.09亿,比上个月增加了近800万,据腾讯的最新财报,微信用户总量已达5.49亿,移动QQ则有6.03亿. 备注: 1.本统计不包括游戏App. 2.用户数指的是在该时间段内访问过该App的用户数量(至少启动一次). 3.数据来源:基于易观智库自己研发的

Android开发环境的发展演变调研

Android开发环境的发展演变调研 前几年比较多的方法是用JDK+eclipse+ADT,该方法除了要配置JDK的路径之外, 还要在eclipse里面打开SDK Manage进行相应的操作.不过近两年来,因为google退出中国市场,要想完成这个操作非常复杂,需要去把所需的材料另外下载,再通过在eclipse里面导入相应的压缩包.除此之外,还存在一个问题:ADT的版本还要与SDK的版本相协调,也就是说,两者只要一个更改,那么必须对另外一个进行调整,否则无法正常打开AVD.(这些都是本人在第一次

Android APK加固技术方案调研

@author ASCE1885的 Github 简书 微博 CSDN 最近项目中需要实现自己的APK加固方案,因此就有了这一篇调研报告. 软件安全领域的攻防向来是道高一尺魔高一丈,攻防双方都处于不断的演变和进化过程中,因此软件加固技术需要长期持续的研究与投入. 目前成熟的第三方解决方案 1. 娜迦 针对Android平台下的APP被逆向分析,破解,植入木马病毒后,用户敏感信息泄露或者被钓鱼网站劫持,NAGA Android保护采用防止静态分析与防止动态调试全面防护的思路,在未保护程序运行的不同

作业一_随笔3_调研Android的开发环境的发展演变

调研某一移动应用/平台的开发环境的发展演变:Android 其实,一开始,我只知道,苹果手机用IOS系统,其他很多手机时候安卓系统.我百度知道Android开发主要是android studio和Eclipse这2个开发工具.我的eclipse和java环境是很早之前好朋友帮我在电脑里弄好的,安装的过程也挺简单的,直接下载安装Android studio,安装没有遇到什么问题,百度经验里面,别的网友说的JDK,SDK和ADT之类的麻烦,我好像也没有遇到,只是打几个勾的事儿~安装完之后,问题来了.

基于Android模拟器的调研

面对02机器上pcdroid异常情况频发,已经影响到自动化测试的稳定性,因此,花了四天时间对当前的Android模拟器进行调研,试图去寻找一款性能稳定,支持多系统版本的模拟器,从而解决当前自动化测试多系统.多异常的问题. (一)初步思考 我一直相信,当前我们所面临的窘境对于一些顶级团队来说,可能已经有完美的解决方案.起初对于Android模拟器的思考,还仅限于Android官方与SDK一起提供的模拟器,不过根据之前经验来说,官方的模拟器能解决多版本系统的问题,但是由于Android官方的模拟器使

android后台信息推送调研

android后台信息推送调研 前言 我们已经开发了一个应用,这里称为A应用,类似于天气weather那种.现在的任务就是如果这些A应用有新版本了,或者天气出现比较恶劣的状况,要及时在手机上进行消息的推送,提示有新的应用可以更新了,和天气将要变遭了,提醒用户需要注意的情况.及需要实现消息推送机制. 推送方式基础知识 要获取服务器上不定时更新的信息,一般来说有两种方法:第一种是客户端使用Pull(拉)的方式,就是隔一段时间就去服务器上获取一下信息,看是否有更新的信息出现.第二种就是 服务器使用Pu

android开源项目之OTTO事件总线(二)官方demo解说

官方demo见  https://github.com/square/otto 注意自己该编译版本为2.3以上,默认的1.6不支持match_parent属性,导致布局文件出错. 另外需要手动添加android-support-v4和otto到自己的libs文件夹. 主要代码逻辑: 1,在主页面点clear按钮,发布两个事件并传递对象. 2,然后LocationHistoryFragment接收事件对象,并处理. 1,BusProvider提供一个全局唯一的Bus实例对象 调用的时候使用MyPr