MailOtto 实现完美预加载以及源码解读

背景:git

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

MailOtto使用工具

   借着做者的一个小Demo:在第一个页面预先为第四个页面预加载数据,模拟加载数据的时间须要8S,当咱们进入到第四个页面的时候,若是数据尚未加载完成,咱们还会继续等待。这样就完美实现了预加载的效果。post

   第一步:学习

 

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

  第二步:spa

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

 

 

    第三步:3d

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

    

  总结MailOtto的使用方法:

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

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

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

 

  你必定很好奇,这过程是怎么实现的,别急,咱们下面看看源码就知道了。下面是源码,若是不喜欢看源码的能够直接略过。

    首先是处理方法的编写,在编译的时候,使用发射机制在目标类能够找到对应标识的处理类,只须要一个处理类便可,若是多个的话,在经过遍历找出第一个。

                       

 

 

 

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

相关文章
相关标签/搜索