热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

androidrxbus2.0封装,一个编译时注解的RxBus库Apollo

依赖于RxJava的编译时Android事件总线,并且支持Sticky(粘连)事件,以及多个Rx调度器.示例预览引入Apollo到项目中我们需要引入一个apt插件到我们的class

1460000006760407

依赖于RxJava的编译时Android事件总线,并且支持Sticky(粘连)事件,以及多个Rx调度器.

示例预览

1460000006255253

引入Apollo到项目中

我们需要引入一个apt插件到我们的classpath来开启注解处理功能.

buildscript {

repositories {

jcenter()

}

dependencies {

//Android注解处理工具

classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'

}

}

allProjects {

repositories {

maven { url "https://www.jitpack.io" }

}

}

增加apt插件到项目的build.gradle配置文件中,使用apt插件来开启注解处理功能.

apply plugin: 'com.neenbedankt.android-apt'

dependencies {

apt "com.github.lsxiao.Apollo:processor:0.1.4-alpha.1"

compile "com.github.lsxiao.Apollo:apollo:0.1.4-alpha.1"

compile 'io.reactivex:rxandroid:1.2.1'//实际操作时请使用最新的rxandroid版本,这仅仅是一个示例.

}

使用方法

Init

在Application中初始化Apollo.

public class App extends Application {

@Override

public void onCreate() {

super.onCreate();

//注意!SubscriberBinderImplement 是由Apollo在编译时生成的代码.

//因为Apollo是java库,所以无法依赖于Android库(RxAndroid).

//所以你必须提供一个AndroidSchedulers.mainThread()调度器来初始化Apollo.

Apollo.get().init(SubscriberBinderImplement.instance(), AndroidSchedulers.mainThread());

}

}

绑定/解绑

你可以在基类中来绑定和解绑Apollo.

public abstract class BaseActivity extends AppCompatActivity {

private SubscriptionBinder mBinder;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(getLayoutId());

mBinder = Apollo.get().bind(this);

afterCreate(savedInstanceState);

}

@Override

protected void onDestroy() {

super.onDestroy();

mBinder.unbind();

}

protected abstract int getLayoutId();

protected abstract void afterCreate(Bundle savedInstanceState);

}

接收事件

在你喜欢的地方来接收事件.

默认使用

@Receive(tag = TAG)

public void receiveEvent(Event event) {

//do something.

}

无参使用

@Receive(tag = TAG)

public void showDialog(){

//show dialog.

}

多个Tag

@Receive(tag = {TAG1,TAG2})

public void showDialog(){

//show dialog.

}

只接受一次普通事件

//the event will be received only once.

@Receive(tag = TAG,type = Receive.Type.NORMAL_ONCE)

public void showDialog(){

//show dialog.

}

调度器

//the subscribeOn and observeOn support main, io, new, computation, trampoline, immediate schedulers.

//subscribeOn default scheduler is io.

//observeOn default scheduler is main.

@Receive(tag = TAG,subscribeOn = Receive.Thread.IO, observeOn = Receive.Thread.MAIN)

public void receiveUser() {

//do something.

}

接收sticky事件

@Receive(tag = TAG,type = Receive.Type.STICKY)

public void receiveEvent(Event event) {

//do something.

}

接收后清除该sticky事件

@Receive(tag = TAG,type = Receive.Type.STICKY_REMOVE)

public void receiveEvent(Event event) {

//do something.

}

接收后清除所有的sticky事件

@Receive(tag = TAG,type = Receive.Type.STICKY_REMOVE_ALL)

public void receiveEvent(Event event) {

//do something.

}

发送事件

//a normal event

Apollo.get().send(EVENT_SHOW_USER, new User("lsxiao"));

//a non-parameter event

Apollo.get().send(EVENT_SHOW_USER);

//a sticky event

Apollo.get().sendSticky(EVENT_SHOW_BOOK, new Book("A Song of Ice and Fire"));

Pull Requests(请求代码合并)

欢迎所有的 pull requests.

维护人

知乎 : @面条

Github : @lsxiao

开源许可

Copyright 2016 lsxiao, Inc.

Licensed under the Apache License, Version 2.0 (the "License");

you may not use this file except in compliance with the License.

You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software

distributed under the License is distributed on an "AS IS" BASIS,

WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

See the License for the specific language governing permissions and

limitations under the License.



推荐阅读
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 20211101CleverTap参与度和分析工具功能平台学习/实践
    1.应用场景主要用于学习CleverTap的使用,该平台主要用于客户保留与参与平台.为客户提供价值.这里接触到的原因,是目前公司用到该平台的服务~2.学习操作 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • 本文介绍了一款名为TimeSelector的Android日期时间选择器,采用了Material Design风格,可以在Android Studio中通过gradle添加依赖来使用,也可以在Eclipse中下载源码使用。文章详细介绍了TimeSelector的构造方法和参数说明,以及如何使用回调函数来处理选取时间后的操作。同时还提供了示例代码和可选的起始时间和结束时间设置。 ... [详细]
  • 今日份分享:Flutter自定义之旋转木马
    今日份分享:Flutter自定义之旋转木马-先上图,带你回到童年时光:效果分析子布局按照圆形顺序放置且平分角度子布局旋转、支持手势滑动旋转、快速滑动抬手继续旋转、自动旋转支持X轴旋 ... [详细]
  • 今天就跟大家聊聊有关怎么在Android应用中实现一个换肤功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根 ... [详细]
  • python3 logging
    python3logginghttps:docs.python.org3.5librarylogging.html,先3.5是因为我当前的python版本是3.5之所 ... [详细]
author-avatar
牵绊2502897683
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有