背景:

最近项目组需要一个小课题分享,小白刚好从微博里看到一个这样有趣的开源工具MailOtto,是阿里巴巴员工 Drakeet 维护的一个专注懒事件的事件总线,gitHub地址为:https://github.com/drakeet/MailOtto ,Drakeet的个人地址为:https://drakeet.me/mailotto-sample ,个人觉得挺有用,实用起来很方便,就介绍给大家了,小白在学习的过程中通过研究了源码,明白了作者在最后说的,MailOtto绝不仅仅是能够完美实现预加载,还可以代替startActivityForResult,甚至还有同时拥有 Otto/EventBus 的功能的精髓。

MailOtto使用

借着作者的一个小Demo:在第一个页面预先为第四个页面预加载数据,模拟加载数据的时间需要8S,当我们进入到第四个页面的时候,如果数据还没有加载完成,我们还会继续等待。这样就完美实现了预加载的效果。

第一步:

第二个框框内顺便说了一下,这里用若引用的目的,是为了防止内存泄露,具体原因为:非静态匿名内部类持有一个对外部类的隐士引用,而静态内部类不会,在InnerRunable里面,我们把数据通过Mail这个类把数据传给了目标处理类。这样子我们就可以继续做其他事情了。

  第二步:

在目标页面里面只需要一句   Mailbox.getInstance().atHome(this);  说明我已经在等着了,数据快来吧,就行了,如图所示:

    第三步:

在不变页面编写处理的方法,就行了,如图所示:

总结MailOtto的使用方法:

1.   子线程里取数据,然后够通过 Mailbox.getInstance().post(new Mail("A mail from MainActivity", TargetActivity.class));   把数据发送给目标页面,实现预加载效果

2.   在目标页面声明   Mailbox.getInstance().atHome(this);   我已经来到目标页面了,有数据就砸过来吧。

3.   编写唯一一个带有@OnMailReceived  的处理方法来处理数据,结束。

  你一定很好奇,这过程是怎么实现的,别急,我们下面看看源码就知道了。下面是源码,如果不喜欢看源码的可以直接略过。

    首先是处理方法的编写,在编译的时候,使用发射机制在目标类可以找到对应标识的处理类,只需要一个处理类即可,如果多个的话,在通过遍历找出第一个。

                       

 

以上就是对MailOtto的基本认识,使用后回发现,这是一个懒事件总线,也是一种消息,订阅机制,其实可以代替startActivityForResult ,据不仅仅用于预加载,可以用于任何时候的数据传递,剩下一大批判断是否完成的操作。

MailOtto 实现完美预加载以及源码解读的更多相关文章

  1. Webpack探索【16】--- 懒加载构建原理详解(模块如何被组建&如何加载)&源码解读

    本文主要说明Webpack懒加载构建和加载的原理,对构建后的源码进行分析. 一 说明 本文以一个简单的示例,通过对构建好的bundle.js源码进行分析,说明Webpack懒加载构建原理. 本文使用的 ...

  2. Webpack探索【15】--- 基础构建原理详解(模块如何被组建&如何加载)&源码解读

    本文主要说明Webpack模块构建和加载的原理,对构建后的源码进行分析. 一 说明 本文以一个简单的示例,通过对构建好的bundle.js源码进行分析,说明Webpack的基础构建原理. 本文使用的W ...

  3. Volley 图片加载相关源码解析

    转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/47721631: 本文出自:[张鸿洋的博客] 一 概述 最近在完善图片加载方面的 ...

  4. ElasticSearch 启动时加载 Analyzer 源码分析

    ElasticSearch 启动时加载 Analyzer 源码分析 本文介绍 ElasticSearch启动时如何创建.加载Analyzer,主要的参考资料是Lucene中关于Analyzer官方文档 ...

  5. Springboot学习04-默认错误页面加载机制源码分析

    Springboot学习04-默认错误页面加载机制源码分析 前沿 希望通过本文的学习,对错误页面的加载机制有这更神的理解 正文 1-Springboot错误页面展示 2-Springboot默认错误处 ...

  6. Springboot 加载配置文件源码分析

    Springboot 加载配置文件源码分析 本文的分析是基于springboot 2.2.0.RELEASE. 本篇文章的相关源码位置:https://github.com/wbo112/blogde ...

  7. 微服务架构 | *2.3 Spring Cloud 启动及加载配置文件源码分析(以 Nacos 为例)

    目录 前言 1. Spring Cloud 什么时候加载配置文件 2. 准备 Environment 配置环境 2.1 配置 Environment 环境 SpringApplication.prep ...

  8. jQuery实现DOM加载方法源码分析

    传统的判断dom加载的方法 使用 dom0级 onload事件来进行触发所有浏览器都支持在最初是很流行的写法 我们都熟悉这种写法: window.onload=function(){ ... }  但 ...

  9. abp vnext2.0之核心组件模块加载系统源码解析与简单应用

    abp vnext是abp官方在abp的基础之上构建的微服务架构,说实话,看完核心组件源码的时候,很兴奋,整个框架将组件化的细想运用的很好,真的超级解耦.老版整个框架依赖Castle的问题,vnext ...

随机推荐

  1. git codes

    https://github.com/chibi-guts/DressUpProject https://github.com/TuttiFruttiFT/TFAndroid https://gith ...

  2. 关于js的replace替换

    关于js的replace替换 msgContent = msgContent.replace("a","b"); 这样的替换只会把第一个a替换成b,不会替换全部 ...

  3. android131 360 01 闪屏页和主页面

    主界面: 软件升级流程: 清单文件: <?xml version="1.0" encoding="utf-8"?> <manifest xml ...

  4. 用linq实现登陆功能

    BLL层的逻辑代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; name ...

  5. 启动android程序和虚拟机时候出现如下错误的解决方法

    启动android程序和虚拟机时候出现如下错误的解决方法. 错误重现: [2011-07-13 16:22:48 - Emulator] invalid command-line parameter: ...

  6. jQuery的.bind()、.live()和.delegate(),on之间区别

    基本要素 51CTO推荐专题:jQuery从入门到精通 DOM树 首先,可视化一个HMTL文档的DOM树是很有帮助的.一个简单的HTML页面看起来就像是这个样子: 事件冒泡(又称事件传播) 当我们点击 ...

  7. if elseif else

    1)if,else if需要接判断表达式,只有在满足条件的时候执行而else语句是在前面条件都不满足的时候才能执行(2) 一个if...else if...else语句中可以有多个else if语句, ...

  8. Flex学习第一天(两个数相加)

    <?xml version="1.0" encoding="utf-8"?><s:Application xmlns:fx="htt ...

  9. oracle 基础SQL语句 多表查询 子查询 分页查询 合并查询 分组查询 group by having order by

    select语句学习 . 创建表 create table user(user varchar2(20), id int); . 查看执行某条命令花费的时间 set timing on: . 查看表的 ...

  10. VS版本下载

    tfs2012:BVGTF-T7MVR-TP46H-9Q97G-XBXRB http://www.microsoft.com/zh-cn/download/details.aspx?id=30658 ...